以下代码无效。问题是事务未在db
中提交案例1:
@Transactional
public void save(Person p) {
Session session= sessionFactory.openSession();
session.saveOrUpdate(p);
session.close();
}
但是当我使用下面的代码时,它工作正常:
案例2:
@Transactional
public void save(Person p) {
this.sessionFactory.getCurrentSession().saveOrUpdate(p);
}
查询:
对于案例1问题,我在google上搜索@Transactional无法正常工作。但是,当我错误地使用Case 2时,它就开始工作了。为什么呢?
使用Case 2解决方案后,我在hibernate属性中添加了以下行
的hibernate.current_session_context_class =螺纹
它开始给我错误,然后交易没有激活。
什么是实际错误?
答案 0 :(得分:1)
session.saveOrUpdate(p);
时
你告诉Hibernate更新或添加实体。
但是,相应的记录仍然不存在于底层数据库中。您需要调用session.flush()才能将数据库与Hibernate会话同步。
请注意,如果您的程序在没有调用session.flush()
的情况下结束,那么该记录将不会更新。
的hibernate.current_session_context_class =螺纹
Hibernate会将从getCurrentSession()
返回的Session绑定到当前线程,您必须以编程方式管理事务。
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
...
//code here
...
session.getTransactionCommit();