Java 为什么我不能在hibernate中更改刷新模式
org.springframework.dao.InvalidDataAccessApiUsageException:写入 只读模式(FlushMode.MANUAL)下不允许操作:旋转 将会话转换为FlushMode.COMMIT/AUTO或删除“只读”标记 从事务定义 我试图用代码和xml将其更改为另一种Java 为什么我不能在hibernate中更改刷新模式,java,spring,hibernate,jpa,spring-orm,Java,Spring,Hibernate,Jpa,Spring Orm,org.springframework.dao.InvalidDataAccessApiUsageException:写入 只读模式(FlushMode.MANUAL)下不允许操作:旋转 将会话转换为FlushMode.COMMIT/AUTO或删除“只读”标记 从事务定义 我试图用代码和xml将其更改为另一种flushmode,但它仍然是自动的 hibernatetemplate.getSessionFactory().openSession().setFlushMode(FlushMode.C
flushmode
,但它仍然是自动的
hibernatetemplate.getSessionFactory().openSession().setFlushMode(FlushMode.COMMIT);
而
COMMIT
最有可能的是,您在会话上的操作(其中一些是分发或更新实体)不在事务上下文中
试着把它们围起来:
Session session = hibernatetemplate.getSessionFactory().openSession();
Transaction tx = session.beginTrasaction();
...
tx.commit();
session.close();
现在,当您开始事务时,flush模式应该隐式设置为COMMIT/AUTO。实际上我解决了它
final Person object = new Person(id, name, password);
hibernateTemplate.execute(new HibernateCallback<Person>() {
public Person doInHibernate(Session session)
throws HibernateException {
session.save(object);
session.flush();
return object;
}
});
最终人员对象=新人员(id、姓名、密码);
执行(新的HibernateCallback(){
公共人士doInHibernate(会议)
抛出冬眠异常{
session.save(对象);
session.flush();
返回对象;
}
});
您可以创建hibernateTemplate对象并覆盖excute方法实际上我解决了它hibernateTemplate.execute(新HibernateCallback(){@override public User doInHibernate(Session sn)抛出HibernateException{sn.save(User);return User;});