0 0

Spring+JPA诡异问题0

我Spring+JPA在非java web 情况下,运行出错了。错误信息是: javax.persistence.TransactionRequiredException: Executing an update/delete query。网上我查了很久,大概就是说没事务吧。但是我数据库不一定非要事务啊。Hibernate+Spring相同一个数据库下却没任何问题。好了,说主要问题:

先给出applicationContext.xml的代码

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	
        <context:component-scan base-package="org.xgj.sshtest" />
        
        <bean id="entityManagerFactory"
		class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="sshtest_unit">
		</property>
	</bean>
</beans>

 下面是JPA的配置文件:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
	version="1.0">
	<persistence-unit name="sshtest_unit"
		transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>org.xgj.sshtest.BaseEntity</class>
		<class>org.xgj.sshtest.entity.UserEntity</class>
		<class>org.xgj.sshtest.entity.PropertyEntity</class>



		<!-- 属性配置 -->
		<properties>
			<!-- ==============Hibernate 连接设置================= -->
			<!-- 方言 -->
			<property name="hibernate.dialect"
				value="org.hibernate.dialect.MySQL5Dialect" />
			<!-- org.hibernate.dialect.SQLServerDialect -->
			<!-- org.hibernate.dialect.MySQLDialect -->
			<!-- org.hibernate.dialect.Oracle10gDialect -->

			<!-- 驱动类 -->
			<property name="hibernate.connection.driver_class"
				value="com.mysql.jdbc.Driver" />
			<!-- net.sourceforge.jtds.jdbc.Driver -->
			<!-- oracle.jdbc.driver.OracleDriver -->
			<!-- com.mysql.jdbc.Driver -->

			<!-- URL地址 -->
			<property name="hibernate.connection.url"
				value="jdbc:mysql://localhost:3306/sshtest?useUnicode=true&amp;characterEncoding=UTF-8" />
			<!-- jdbc:jtds:sqlserver://localhost:1433/sshtest; -->
			<!--  oracle  jdbc:oracle:thin:@localhost:1521:sshtest -->
			<!--   mysql jdbc:mysql://localhost:3306/sshtest?useOldAliasMetadataBehavior=true  -->

			<!-- 用户名 -->
			<property name="hibernate.connection.username" value="root" />

			<!-- 密码 -->
			<property name="hibernate.connection.password"
				value="123456" />

			<!-- 连接的字符编码 -->
			<property name="hibernate.connection.charSet" value="UTF-8" />
			<property name="hibernate.connection.characterEncoding"
				value="UTF-8" />


			<!-- ==============Hibernate 附加设置================= -->
			<!-- create 删除以前的,从新建. create-drop 根据model类生成表,但是sessionFactory一关闭,表就自动删除 
				. update 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行 validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值 -->
			<!-- <property name="hibernate.hbm2ddl.auto" value="update" /> -->

			<!-- 在控制台打印SQL语句 -->
			<property name="hibernate.show_sql" value="true" />

			<!-- 格式化 SQL语句-->
			<property name="hibernate.format_sql" value="true" />

			<!-- Hiberante将为SQL产生注释,这样更利于调试-->
			<property name="hibernate.use_sql_comments" value="true" />


			<!-- ==============Hibernate C3P0设置================= -->
			<!-- c3p0连接提供器 -->
			<property name="hibernate.connection.provider_class"
				value="org.hibernate.connection.C3P0ConnectionProvider" />
				
			<!-- 最小连接数 -->
			<property name="c3p0.min_size" value="5" />
			
			<!-- 最大连接数 -->
			<property name="c3p0.max_size" value="30" />
			
			<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
			<property name="c3p0.maxIdleTime" value="60" />
			
			<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
			<property name="c3p0.timeout" value="1800" />
			
			<!-- 最大的PreparedStatement的数量 -->
			<property name="c3p0.max_statements" value="50" />
			
			<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
			<property name="c3p0.idle_test_period" value="120" />
			
			<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
			<property name="c3p0.acquire_increment" value="1" />
			<!-- 是否每次都验证连接是否可用 -->
			<property name="c3p0.validate" value="false" />
		</properties>



	</persistence-unit>
</persistence>

 

 

然后是JAVA 代码:

  

public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String[] configs = { "spring-dao.xml", "spring-scan.xml" };
		ApplicationContext ctx = new ClassPathXmlApplicationContext(configs);
		UserDAO userDAO = (UserDAO) ctx.getBean("userDAO");
		try {
			UserEntity userEntity= userDAO.get(1L);  //这里没问题
			System.out.println(userEntity.getUsername());    
			userDAO.getEntityManager().createQuery("delete from UserEntity").executeUpdate();     //这里出问题了
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

 userDAO其实里面就封装了一个EntityManager。这样注入EntityManager到UserDAO的

 

 

	/**
	 * JPA实体管理器
	 */
	@PersistenceContext
	private EntityManager em;

 

 

 

我的问题是上面为什么出现 javax.persistence.TransactionRequiredException: Executing an update/delete query 异常呢?我TMD不用事务不行么?纯的hibernate就没这个问题。。 大家帮一下

2013年4月05日 21:04

1个答案 按时间排序 按投票排序

0 0

jpa对修改的硬性规定

可参考
http://jinnianshilongnian.iteye.com/blog/1439369

引用
此实例与Hibernate和Ibatis有所区别,通过JpaTemplate模板类进行如持久化等操作时必须有运行在事务环境中,否则可能抛出如下异常或警告:
“javax.persistence.TransactionRequiredException:Executing an update/delete query”:表示没有事务支持,不能执行更新或删除操作;
警告“delaying identity-insert due to no transaction in progress”:需要在日志系统启动debug模式才能看到,表示在无事务环境中无法进行持久化,而选择了延迟标识插入。

2013年4月06日 06:53

相关推荐

    struts2+spring+jpa整合的完整例子(含分页)

    在学习jpa时候做的一个struts2+spring+jpa整合的完整例子 包含分页,一个简单的 资产入库系统 并实现了登陆等。

    Spring+Jersey+JPA+Hibernate+MySQL整合

    在Spring+Jersey+JPA+Hibernate的组合中,Hibernate作为JPA的具体实现,负责与MySQL数据库之间的交互。 MySQL是一种广泛使用的开源关系型数据库管理系统,因其高性能、可靠性和易于管理而在Web应用中受到青睐。在这...

    基于_Struts_2+Spring+JPA_框架的WEB_应用

    **基于Struts 2 + Spring + JPA框架的WEB应用详解** 在现代的Java Web开发中,使用MVC(Model-View-Controller)设计模式已经成为主流。Struts 2、Spring和Java Persistence API (JPA) 是三个强大的开源框架,它们...

    Spring+Struts2+JPA

    **Spring+Struts2+JPA 整合详解** 在Java Web开发中,Spring、Struts2和JPA是三个非常重要的框架。Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Struts2是一个强大的MVC框架...

    pringMVC+Spring+JPA+LayUI+JSP学生选课系统

    SpringMVC+Spring+JPA+LayUI+JSP学生选课系统 本项目为计算机学生选课系统,可作为期末作品,供参考 项目技术: SpringMVC Spring SpringDataJPA LayUI JSP MySQL5.7

    Struts+spring+JPA例子

    在这个"Struts2.2.3+Spring3.0.5+JPA2.0"的例子中,我们将深入探讨这三个框架的集成与应用。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它极大地简化了Java Servlet和JSP的开发...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...

    spring+springMVC+jpa+hibernate框架整合

    在IT领域,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+jpa+hibernate框架整合"就是一个常见的解决方案。这个整合涉及到四个关键的技术栈:Spring框架、SpringMVC、JPA(Java Persistence API)...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA

    在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...

    spring+jpa的applicationContext.xml配置

    spring+jpa的applicationContext.xml配置

    基于SpringBoot2+Jpa+SpringSecurity+redis+Vue的前后端分离系统

    持久层框架:Spring boot Jpa 安全框架:Spring Security 缓存框架:Redis 日志打印:logback+log4jdbc 接口文档 swagger2 其他:fastjson,aop,MapStruct等。 页面框架:Vue 前端源码:eladmin-qt 后端源码:el...

    SpringMVC+Spring+JPA+Maven框架搭建

    SpringMVC+Spring+JPA+Maven框架搭建 SpringMVC+Spring+JPA+Maven框架的搭建涉及到一系列的技术组件,其中SpringMVC是Spring框架的一个模块,用于构建Web应用,提供MVC架构;Spring框架是一套全面的企业级应用开发...

    spring注解+spring data jpa文档+JPA文档.rar

    Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...

    jsf+spring+jpa

    ### JSF + Spring + JPA 组合应用详解 #### 一、概述 随着Web应用程序的需求不断增长,开发者面临着越来越复杂的挑战。为了更好地管理和优化Web应用程序的开发过程,出现了多种框架和技术栈。其中,“JSF + Spring...

    SpringBoot + Vue +JPA 的实验室助理工作管理系统课程设计

    该项目是基于SpringBoot + Vue +JPA 的实验室助理信息管理系统-可用于大学生日常课设 功能点描述: (1)学生 学生注册为系统用户、系统用户报名助理岗位、 (2)实验室技术员 筛选报名信息、实验室助理招聘计划的...

    Struct + spring + jpa

    【Struct + Spring + JPA】是企业级应用开发中常用的技术栈组合,分别代表了三个重要的组件:Struts(一个MVC框架),Spring(一个全面的企业级应用框架),以及JPA(Java Persistence API,Java持久化API)。...

    Struts+Spring+Jpa(hibernate)整合

    "Struts+Spring+Jpa(hibernate)整合"这个主题意味着我们要将这三个框架进行集成,以实现更强大的功能。在实际项目中,这种整合能够帮助开发者更好地管理业务逻辑、持久化数据以及处理用户请求。 1. **Struts**:...

    SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证

    本项目结合了SpringBoot、SpringSecurity以及JPA(Java Persistence API),实现了用户角色权限的登录认证功能。以下是关于这些技术及实现过程的详细讲解。 1. **SpringBoot**:SpringBoot简化了Spring应用的初始...

    spring struct + jpa

    Spring Struct和JPA是两个在Java开发中广泛使用的框架,它们在构建现代企业级应用程序时起着关键作用。Spring Struct是Spring框架的一部分,主要用于Web应用的结构化和组织,而JPA(Java Persistence API)是Java...

    基于LayUI+Spring Boot+MySQL+JPA+Shiro的科研信息管理系统源码+项目说明+数据库.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、...基于LayUI+Spring Boot+MySQL+JPA+Shiro的科研信息管理系统源码+项目说明+数据库.zip

Global site tag (gtag.js) - Google Analytics