Hibernate EntityManager.merge()不更新数据库 [英] Hibernate EntityManager.merge() does not update database
问题描述
我有一个使用Hibernate的Spring MVC webapp,我的问题是 em.merge
在调用后没有响应。
这是我的Controller
@RequestMapping(value =/ updDep,method = RequestMethod.PUT)
@ResponseBody
public String updDeps(@RequestBody Department department){
departmentService.addDepartment(department);
System.out.println(合并后;在控制器中);
返回成功;
}
以及带有addDepartment()方法的Department Service类:
@Repository
方法。
public class DepartmentServiceImpl implements DepartmentService {
@PersistenceContext(unitName =MyPersistenceUnit)
私人EntityManager entityManager;
....
// getter / setter entityManager ....
...
@Override
@Transactional
public void addDepartment(Department部门){
System.out.println(department.getName()+merge:+ department.getId());
getEntityManager()。merge(department);
getEntityManager()。flush();
System.out.println(after);
$ b因此我试着解释问题:
<$ c $之后从我的控制器updDeps(..)
方法调用c> addDepartment(Department department)
我在服务器日志中看到这一点:
SECURITY23合并:3
Hibernate:
选择
department0_.id作为
department0_.name a
from
部门部门
其中
department0_.id =?
Hibernate:
更新
部门
集合
名称=?
其中
id =?
就是这样!为什么
System.out.println(after);
和System.out.println(merge; in controller);
不执行?在em.merge
被调用后没有任何事情发生。
MySQL表中的数据仍未更新。
但如果我添加
department.setId(null);
之前,像那样
@Transactional
public void addDepartment(Department department){
department.setId(null);
System.out.println(department.getName()+merge:+ department.getId());
getEntityManager()。merge(department);
getEntityManager()。flush();
System.out.println(after);
}
所有的工作都是在db中创建新的实例,但我想更新当前。
有什么问题?
更新1
项目结构:
PERSISTENCE.XML
< persistence-unit name =MyPersistenceUnittransaction-type =RESOURCE_LOCAL>
< provider> org.hibernate.ejb.HibernatePersistence< / provider>
<属性>
< property name =hibernate.connection.urlvalue =jdbc:mysql:// localhost:3306 / testbd/>
< property name =hibernate.connection.driver_classvalue =com.mysql.jdbc.Driver/>
< property name =hibernate.connection.usernamevalue =root/>
< property name =hibernate.connection.passwordvalue =root/>
<! - < property name =hibernate.hbm2ddl.import_filesvalue =import.sql/> - >
< property name =hibernate.show_sqlvalue =true/>
< property name =hibernate.format_sqlvalue =true/>
< property name =hibernate.hbm2ddl.autovalue =update/>
< property name =hibernate.dialectvalue =org.hibernate.dialect.MySQLDialect/>
< / properties>
< / persistence-unit>
< /持久性>
SPRING CONFIG
< mvc:annotation-driven />
< context:annotation-config />
< context:component-scan base-package =epam.rest/>
< bean class =org.springframework.web.servlet.view.InternalResourceViewResolver>
< property name =prefix>
< value> / WEB-INF / pages /< / value>
< / property>
< property name =suffix>
<值> .jsp< /值>
< / property>
< / bean>
< bean class =org.springframework.beans.factory.config.PropertyPlaceholderConfigurer>
< property name =location>
< value> classpath:jdbc.properties< / value>
< / property>
< / bean>
< bean id =dataSourceclass =org.springframework.jdbc.datasource.DriverManagerDataSource>
< property name =driverClassNamevalue =$ {jdbc.driverClassName}/>
< property name =urlvalue =$ {jdbc.url}/>
< property name =usernamevalue =$ {jdbc.username}/>
< property name =passwordvalue =$ {jdbc.password}/>
< / bean>
< bean id =entityManagerFactoryclass =org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean>
< property name =persistenceUnitNamevalue =MyPersistenceUnit/>
< / bean>
< bean id =transactionManagerclass =org.springframework.orm.jpa.JpaTransactionManager>
< property name =dataSourceref =dataSource/>
< property name =entityManagerFactoryref =entityManagerFactory/>
< / bean>
< tx:注解驱动的事务管理器=事务管理器proxy-target-class =true/>
< / beans>
更新3
添加我的LOG4J登录期.merge()事务,我创建了ROLLBACK日志,但我不知道最新的问题是什么?:
08:54:28,291 DEBUG LogicalConnectionImpl:218 - 获得JDBC连接
08:54:28,291 DEBUG JdbcTransaction:69 - 初始自动提交状态:true
08:54:28,292 DEBUG JdbcTransaction:71 - 禁用自动提交
08:54: 28,301 TRACE IdentifierValue:139 - ID unsaved-value:null
08:54:28,302 TRACE AbstractSaveEventListener:504 - 分离的实例:epam.rest.entity.Department
08:54:28,304 TRACE DefaultMergeEventListener:245 - 合并分离的实例
08:54:28,310 TRACE DefaultLoadEventListener:240 - 加载实体:[epam.rest.entity.Department#16]
08:54:28,311 TRACE DefaultLoadEventListener:403 - 试图解析: [epam.rest.entity.Department#16]
08:54:28,311 TRACE DefaultLoadEventListener:427 - 对象在任何缓存中都未解析:[epam.rest.en tity.Department#16]
08:54:28,312 TRACE AbstractEntityPersister:3923 - 获取实体:[epam.rest.entity.Department#16]
08:54:28,312 DEBUG加载器:2109 - 加载实体:[epam.rest.entity.Department#16]
08:54:28,312 DEBUG SQL:104 -
选择
department0_.id作为id1_0_0_,
department0_.name作为name2_0_0_
from
department department0_
where
department0_.id =?
08:54:28,314 TRACE JdbcCoordinatorImpl:319 - 注册语句[com.mysql.jdbc.JDBC4PreparedStatement@6c31a161:select department0_.id as id1_0_0_,department0_.name as department2_0_0_ from department department0_ where department0_.id = ** NOT SPECIFIED **]
08:54:28,314 TRACE JdbcCoordinatorImpl:329 - 注册最后一条查询语句[com.mysql.jdbc.JDBC4PreparedStatement@6c31a161:select department0_.id as id1_0_0_,department0_.name as department2_0_0_ from department department0_ where department0_ .id = ** NOT SPECIFIED **]
08:54:28,320 TRACE BasicBinder:84 - 绑定参数[1]为[BIGINT] - 16
08:54:28,320 TRACE加载器:1909 - 绑定[2]参数总数
08:54:28,321 TRACE JdbcCoordinatorImpl:374 - 注册结果集[com.mysql.jdbc.JDBC4ResultSet@4e1d82e2]
08:54:28,322 TRACE加载程序:937 - 处理结果集
08:54:28,322 DEBUG加载程序:942 - 结果集行:0
08:54:28,323 DEBUG加载程序:1476 - 结果行:EntityKey [epam.rest.entity.Department#16]
08:54:28,323 TRACE Loader:1652 - 从ResultSet初始化对象:[epam.rest.entity.Department#16]
08:54:28,333 TRACE AbstractEntityPersister:2844 - 水化实体:[epam。 rest.entity.Department#16]
08:54:28,334 TRACE BasicExtractor:74 - 找到[REWQQ]列[name2_0_0_]
08:54:28,337 TRACE Loader:962 - 完成处理结果集( 1行)
08:54:28,338 TRACE加载程序:1106 - 水合物总量:1
08:54:28,338 DEBUG TwoPhaseLoad:158 - 解析[epam.rest.entity.Department#16]
08:54:28,343 DEBUG TwoPhaseLoad:277 - 完成实体化[epam.rest.entity.Department#16]
08:54:28,344 TRACE JdbcCoordinatorImpl:358 - 释放语句[com.mysql.jdbc .JDBC4PreparedStatement @ 6c31a161:选择department0_.id作为id1_0_0_,department0_.name作为name2_0_0_来自department department0_,其中department0_.id = 16]
08:54:28,344 TRACE JdbcCoordinatorImpl:519 - 关闭结果集[com.mysql.jdbc .JDBC4ResultSet @ 4e1d82e2]
08:54: 28,345 TRACE JdbcCoordinatorImpl:476 - 关闭准备好的语句[com.mysql.jdbc.JDBC4PreparedStatement@6c31a161:select department0_.id as id1_0_0_,department0_.name as name2_0_0_ from department department0_ where department0_.id = 16]
08:54: 28,345 TRACE JdbcCoordinatorImpl:249 - 在语句执行处理后启动[ON_CLOSE]
08:54:28,345 TRACE StatefulPersistenceContext:1022 - 初始化非懒惰集合
08:54:28,346 DEBUG加载器:2133 - 完成实体加载
08:54:28,352 TRACE UnresolvedEntityInsertActions:121 - 没有实体插入操作具有不可空,暂时的实体依赖关系。
08:54:28,353 DEBUG AbstractTransactionImpl:173 - 提交
08:54:28,353 TRACE SessionImpl:403 - 自动刷新会话
08:54:28,353 TRACE AbstractFlushingEventListener:82 - 刷新会话
08:54:28,355 DEBUG AbstractFlushingEventListener:144 - 处理刷新时间级联
08:54:28,358 TRACE级联:151 - 处理级联ACTION_PERSIST_ON_FLUSH用于:epam.rest.entity.Department
08:54 :28,359 TRACE级联:188 - 完成处理级联ACTION_PERSIST_ON_FLUSH用于:epam.rest.entity.Department
08:54:28,359 DEBUG AbstractFlushingEventListener:185 - 脏检查集合
08:54:28,360 TRACE AbstractFlushingEventListener:200 - 刷新实体和处理引用集合
08:54:28,365 TRACE AbstractEntityPersister:4097 - epam.rest.entity.Department.name很脏
08:54:28,366 TRACE DefaultFlushEntityEventListener:642 - 发现脏属性[ [epam.rest.entity.Department#16]]:[Ljava.lang.String; @ 3aa8208a
08:54: 28,366 TRACE DefaultFlushEntityEventListener:281 - 更新实体:[epam.rest.entity.Department#16]
08:54:28,371 TRACE AbstractFlushingEventListener:242 - 处理未引用的集合
08:54:28,371 TRACE AbstractFlushingEventListener:254 - 调度集合删除/(重新)创建/更新
08:54:28,372调试AbstractFlushingEventListener:118 - 刷新:0插入,1更新,0删除1个对象
08:54:28,372调试AbstractFlushingEventListener: 125 - 刷新:0(重新创建),0更新,0清除到0集合
08:54:28,373 DEBUG EntityPrinter:114 - 上市实体:
08:54:28,373 DEBUG EntityPrinter:121 - epam .rest.entity.Department {id = 16,name = REWQQ112}
08:54:28,373 TRACE AbstractFlushingEventListener:327 - 执行flush
08:54:28,383 TRACE AbstractEntityPersister:3166 - 更新实体:[epam .rest.entity.Department#16]
08:54:28,384 TRACE AbstractServiceRegistryImpl:146 - 初始化服务[role = org.hibernate.engine.jdbc.b atch.spi.BatchBuilder]
08:54:28,391 TRACE AbstractServiceRegistryImpl:146 - 初始化服务[role = org.hibernate.service.jmx.spi.JmxService]
08:54:28,393 TRACE BatchBuilderImpl:68 - 构建批处理[size = 1]
08:54:28,395 DEBUG SQL:104 -
更新
部门
set
name =?
其中
id =?
08:54:28,397 TRACE JdbcCoordinatorImpl:319 - 注册语句[com.mysql.jdbc.JDBC4PreparedStatement@15f07169:更新部门set name = ** NOT SPECIFIED **其中id = ** NOT SPECIFIED **]
08:54:28,397 TRACE AbstractEntityPersister:2780 - 脱水实体:[epam.rest.entity.Department#16]
08:54:28,399 TRACE BasicBinder:84 - 绑定参数[1]为[VARCHAR] - REWQQ112
08:54:28,400 TRACE BasicBinder:84 - 绑定参数[2]为[BIGINT] - 16
08:54:28,436 TRACE JdbcCoordinatorImpl:358 - 释放语句[com.mysql.jdbc.JDBC4PreparedStatement @ 15f07169:update departments set name ='REWQQ112'where id = 16]
08:54:28,437 TRACE JdbcCoordinatorImpl:476 - 关闭预准备语句[com.mysql.jdbc.JDBC4PreparedStatement@15f07169:update departments set name =' REWQQ112',其中id = 16]
08:54:28,437 TRACE JdbcCoordinatorImpl:249 - 语句执行处理后启动[ON_CLOSE]
08:54:28,439 TRACE JdbcCoordinatorImpl:249 - 启动船尾er语句执行处理[ON_CLOSE]
08:54:28,440 DEBUG AbstractTransactionImpl:203 - 回滚
08:54:28,480 DEBUG JdbcTransaction:164 - 滚动JDBC连接
08:54:28,481 DEBUG JdbcTransaction:126 - 重新启用自动提交
08:54:28,482 TRACE TransactionCoordinatorImpl:136 - 交易完成后
08:54:28,486 TRACE SessionImpl:624 - 交易完成后
08:54: 28,488 TRACE SessionImpl:342 - 关闭会话
08:54:28,489 TRACE JdbcCoordinatorImpl:171 - 关闭JDBC容器[org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl@26d77937]
08:54:28,490 DEBUG JdbcCoordinatorImpl:173 - HHH000420:关闭未发布的批处理
08:54:28,490 TRACE LogicalConnectionImpl:164 - 关闭逻辑连接
08:54:28,491 DEBUG LogicalConnectionImpl:232 - 释放JDBC连接
08 :54:28,492 TRACE DriverManagerConnectionProviderImpl:233 - 将连接返回到池,池大小:1
08:54:28,493 DEBUG LogicalConnectionIm pl:250 - 已发布的JDBC连接
08:54:28,493 TRACE LogicalConnectionImpl:176 - 已关闭逻辑连接
解决方案我不确定,但我认为这是分离对象的问题。
查看此链接 http://www.objectdb.com/java/jpa / persistence / detachI have a Spring MVC webapp using Hibernate, and my problem is that
em.merge
doesn't respond after the call.Here is my Controller
@RequestMapping(value = "/updDep", method = RequestMethod.PUT) @ResponseBody public String updDeps(@RequestBody Department department ) { departmentService.addDepartment(department); System.out.println("after merge; in controller"); return "Success"; }
And Department Service class with addDepartment() method:
@Repository public class DepartmentServiceImpl implements DepartmentService { @PersistenceContext(unitName = "MyPersistenceUnit") private EntityManager entityManager; .... //getter/setter entityManager.... ... @Override @Transactional public void addDepartment(Department department) { System.out.println(department.getName() + " merge: " + department.getId()); getEntityManager().merge(department); getEntityManager().flush(); System.out.println("after"); }
So i try to explain problem: After
addDepartment(Department department)
method is called from my ControllersupdDeps(..)
method. I see this in my servers log:SECURITY23 merge: 3 Hibernate: select department0_.id as department0_.name a from departments departm where department0_.id=? Hibernate: update departments set name=? where id=?
And that's all! Why did
System.out.println("after");
andSystem.out.println("after merge; in controller");
not execute? Afterem.merge
was called nothing happened.And data in MySQL table still not updated. But if I add
department.setId(null);
before, like that
@Transactional public void addDepartment(Department department) { department.setId(null); System.out.println(department.getName() + " merge: " + department.getId()); getEntityManager().merge(department); getEntityManager().flush(); System.out.println("after"); }
All works and it created new instance in db, but I want update current. What's the problem? UPDATE 1 Project Structure:
PERSISTENCE.XML
<persistence-unit name="MyPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/testbd"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="root"/> <!--<property name="hibernate.hbm2ddl.import_files" value= "import.sql"/>--> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> </properties> </persistence-unit> </persistence>
SPRING CONFIG
<mvc:annotation-driven /> <context:annotation-config /> <context:component-scan base-package="epam.rest" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/pages/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitName" value="MyPersistenceUnit"/> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="dataSource" ref="dataSource" /> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> </beans>
UPDATE 3 ADD MY LOG4J log in period of em.merge() transaction, where I founded ROLLBACK log but I dont know whats the problem?:
08:54:28,291 DEBUG LogicalConnectionImpl:218 - Obtained JDBC connection 08:54:28,291 DEBUG JdbcTransaction:69 - initial autocommit status: true 08:54:28,292 DEBUG JdbcTransaction:71 - disabling autocommit 08:54:28,301 TRACE IdentifierValue:139 - ID unsaved-value: null 08:54:28,302 TRACE AbstractSaveEventListener:504 - Detached instance of: epam.rest.entity.Department 08:54:28,304 TRACE DefaultMergeEventListener:245 - Merging detached instance 08:54:28,310 TRACE DefaultLoadEventListener:240 - Loading entity: [epam.rest.entity.Department#16] 08:54:28,311 TRACE DefaultLoadEventListener:403 - Attempting to resolve: [epam.rest.entity.Department#16] 08:54:28,311 TRACE DefaultLoadEventListener:427 - Object not resolved in any cache: [epam.rest.entity.Department#16] 08:54:28,312 TRACE AbstractEntityPersister:3923 - Fetching entity: [epam.rest.entity.Department#16] 08:54:28,312 DEBUG Loader:2109 - Loading entity: [epam.rest.entity.Department#16] 08:54:28,312 DEBUG SQL:104 - select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from departments department0_ where department0_.id=? 08:54:28,314 TRACE JdbcCoordinatorImpl:319 - Registering statement [com.mysql.jdbc.JDBC4PreparedStatement@6c31a161: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from departments department0_ where department0_.id=** NOT SPECIFIED **] 08:54:28,314 TRACE JdbcCoordinatorImpl:329 - Registering last query statement [com.mysql.jdbc.JDBC4PreparedStatement@6c31a161: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from departments department0_ where department0_.id=** NOT SPECIFIED **] 08:54:28,320 TRACE BasicBinder:84 - binding parameter [1] as [BIGINT] - 16 08:54:28,320 TRACE Loader:1909 - Bound [2] parameters total 08:54:28,321 TRACE JdbcCoordinatorImpl:374 - Registering result set [com.mysql.jdbc.JDBC4ResultSet@4e1d82e2] 08:54:28,322 TRACE Loader:937 - Processing result set 08:54:28,322 DEBUG Loader:942 - Result set row: 0 08:54:28,323 DEBUG Loader:1476 - Result row: EntityKey[epam.rest.entity.Department#16] 08:54:28,323 TRACE Loader:1652 - Initializing object from ResultSet: [epam.rest.entity.Department#16] 08:54:28,333 TRACE AbstractEntityPersister:2844 - Hydrating entity: [epam.rest.entity.Department#16] 08:54:28,334 TRACE BasicExtractor:74 - Found [REWQQ] as column [name2_0_0_] 08:54:28,337 TRACE Loader:962 - Done processing result set (1 rows) 08:54:28,338 TRACE Loader:1106 - Total objects hydrated: 1 08:54:28,338 DEBUG TwoPhaseLoad:158 - Resolving associations for [epam.rest.entity.Department#16] 08:54:28,343 DEBUG TwoPhaseLoad:277 - Done materializing entity [epam.rest.entity.Department#16] 08:54:28,344 TRACE JdbcCoordinatorImpl:358 - Releasing statement [com.mysql.jdbc.JDBC4PreparedStatement@6c31a161: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from departments department0_ where department0_.id=16] 08:54:28,344 TRACE JdbcCoordinatorImpl:519 - Closing result set [com.mysql.jdbc.JDBC4ResultSet@4e1d82e2] 08:54:28,345 TRACE JdbcCoordinatorImpl:476 - Closing prepared statement [com.mysql.jdbc.JDBC4PreparedStatement@6c31a161: select department0_.id as id1_0_0_, department0_.name as name2_0_0_ from departments department0_ where department0_.id=16] 08:54:28,345 TRACE JdbcCoordinatorImpl:249 - Starting after statement execution processing [ON_CLOSE] 08:54:28,345 TRACE StatefulPersistenceContext:1022 - Initializing non-lazy collections 08:54:28,346 DEBUG Loader:2133 - Done entity load 08:54:28,352 TRACE UnresolvedEntityInsertActions:121 - No entity insert actions have non-nullable, transient entity dependencies. 08:54:28,353 DEBUG AbstractTransactionImpl:173 - committing 08:54:28,353 TRACE SessionImpl:403 - Automatically flushing session 08:54:28,353 TRACE AbstractFlushingEventListener:82 - Flushing session 08:54:28,355 DEBUG AbstractFlushingEventListener:144 - Processing flush-time cascades 08:54:28,358 TRACE Cascade:151 - Processing cascade ACTION_PERSIST_ON_FLUSH for: epam.rest.entity.Department 08:54:28,359 TRACE Cascade:188 - Done processing cascade ACTION_PERSIST_ON_FLUSH for: epam.rest.entity.Department 08:54:28,359 DEBUG AbstractFlushingEventListener:185 - Dirty checking collections 08:54:28,360 TRACE AbstractFlushingEventListener:200 - Flushing entities and processing referenced collections 08:54:28,365 TRACE AbstractEntityPersister:4097 - epam.rest.entity.Department.name is dirty 08:54:28,366 TRACE DefaultFlushEntityEventListener:642 - Found dirty properties [[epam.rest.entity.Department#16]] : [Ljava.lang.String;@3aa8208a 08:54:28,366 TRACE DefaultFlushEntityEventListener:281 - Updating entity: [epam.rest.entity.Department#16] 08:54:28,371 TRACE AbstractFlushingEventListener:242 - Processing unreferenced collections 08:54:28,371 TRACE AbstractFlushingEventListener:254 - Scheduling collection removes/(re)creates/updates 08:54:28,372 DEBUG AbstractFlushingEventListener:118 - Flushed: 0 insertions, 1 updates, 0 deletions to 1 objects 08:54:28,372 DEBUG AbstractFlushingEventListener:125 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections 08:54:28,373 DEBUG EntityPrinter:114 - Listing entities: 08:54:28,373 DEBUG EntityPrinter:121 - epam.rest.entity.Department{id=16, name=REWQQ112} 08:54:28,373 TRACE AbstractFlushingEventListener:327 - Executing flush 08:54:28,383 TRACE AbstractEntityPersister:3166 - Updating entity: [epam.rest.entity.Department#16] 08:54:28,384 TRACE AbstractServiceRegistryImpl:146 - Initializing service [role=org.hibernate.engine.jdbc.batch.spi.BatchBuilder] 08:54:28,391 TRACE AbstractServiceRegistryImpl:146 - Initializing service [role=org.hibernate.service.jmx.spi.JmxService] 08:54:28,393 TRACE BatchBuilderImpl:68 - Building batch [size=1] 08:54:28,395 DEBUG SQL:104 - update departments set name=? where id=? 08:54:28,397 TRACE JdbcCoordinatorImpl:319 - Registering statement [com.mysql.jdbc.JDBC4PreparedStatement@15f07169: update departments set name=** NOT SPECIFIED ** where id=** NOT SPECIFIED **] 08:54:28,397 TRACE AbstractEntityPersister:2780 - Dehydrating entity: [epam.rest.entity.Department#16] 08:54:28,399 TRACE BasicBinder:84 - binding parameter [1] as [VARCHAR] - REWQQ112 08:54:28,400 TRACE BasicBinder:84 - binding parameter [2] as [BIGINT] - 16 08:54:28,436 TRACE JdbcCoordinatorImpl:358 - Releasing statement [com.mysql.jdbc.JDBC4PreparedStatement@15f07169: update departments set name='REWQQ112' where id=16] 08:54:28,437 TRACE JdbcCoordinatorImpl:476 - Closing prepared statement [com.mysql.jdbc.JDBC4PreparedStatement@15f07169: update departments set name='REWQQ112' where id=16] 08:54:28,437 TRACE JdbcCoordinatorImpl:249 - Starting after statement execution processing [ON_CLOSE] 08:54:28,439 TRACE JdbcCoordinatorImpl:249 - Starting after statement execution processing [ON_CLOSE] 08:54:28,440 DEBUG AbstractTransactionImpl:203 - rolling back 08:54:28,480 DEBUG JdbcTransaction:164 - rolled JDBC Connection 08:54:28,481 DEBUG JdbcTransaction:126 - re-enabling autocommit 08:54:28,482 TRACE TransactionCoordinatorImpl:136 - after transaction completion 08:54:28,486 TRACE SessionImpl:624 - after transaction completion 08:54:28,488 TRACE SessionImpl:342 - Closing session 08:54:28,489 TRACE JdbcCoordinatorImpl:171 - Closing JDBC container [org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl@26d77937] 08:54:28,490 DEBUG JdbcCoordinatorImpl:173 - HHH000420: Closing un-released batch 08:54:28,490 TRACE LogicalConnectionImpl:164 - Closing logical connection 08:54:28,491 DEBUG LogicalConnectionImpl:232 - Releasing JDBC connection 08:54:28,492 TRACE DriverManagerConnectionProviderImpl:233 - Returning connection to pool, pool size: 1 08:54:28,493 DEBUG LogicalConnectionImpl:250 - Released JDBC connection 08:54:28,493 TRACE LogicalConnectionImpl:176 - Logical connection closed
解决方案I am not sure but I think that's problem with 'detached' objects. Look at this link http://www.objectdb.com/java/jpa/persistence/detach
这篇关于Hibernate EntityManager.merge()不更新数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!