为什么我需要行“session.save(user);”在下面的代码片段?我认为,通过find调用,用户已经连接到会话并且更改将被跟踪并提交。你介意给我解释一下细节吗?或者我需要一个特殊的配置或其他我可能听说过这个'功能'的情况?为什么我需要在使用Hibernate查找后明确保存?
session = createSession();
ta = session.beginTransaction();
assertEquals(1, session.createCriteria(MyUser.class).list().size());
// find one user
MyUser user = session.createCriteria(MyUser.class).uniqueResult();
user.setName("Rocker!");
// ### HERE ###
// WHY this 'save' is necessary!!??
session.save(user);
ta.commit();
ta = session.beginTransaction();
assertEquals(1, session.createCriteria(MyUser.class).list().size());
MyUser user = session.createCriteria(MyUser.class).uniqueResult();
assertEquals("Rocker!", user.getName());
ta.commit();
UPDATE 1
同样的问题适用于
- session.save(用户);
- user.setName(“Rocker!”);
- ta.commit();
UPDATE 2
的解决问题的办法是:我使用吉斯/经纱存在。在某些情况下,我通过@Transactional将一个代码块错误地绑定到了一个事务上:因此事务被提前打开,因此单独的更改未包含在提交中。多谢你们!因此,始终确保你了解的情况下,你的事务范围内使用的是春天或吉斯...
你是否已经开始使用hibernate日志记录来检查从uniqueresult()和commit()返回之间会发生什么? – 2010-07-14 11:31:58
我总是用明确的'保存'与休眠的最后几个月。直到今天:我自己问了这个问题。我会看看日志。但看看我的代码下面的编辑︰明确的保存也是必要的后,我已经调用了保存 – rocker 2010-07-14 11:37:50
以及很长一段时间的工作“直到今天”,代码没有改变,这意味着其他一些配置已经改变 - 是务必查看自上次已知工作状态以来整个项目/应用程序发生了什么变化。很明显,事情不会停止。 – 2010-07-14 11:43:31