Java 为什么我不能在hibernate中更改刷新模式

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

org.springframework.dao.InvalidDataAccessApiUsageException:写入 只读模式(FlushMode.MANUAL)下不允许操作:旋转 将会话转换为FlushMode.COMMIT/AUTO或删除“只读”标记 从事务定义

我试图用代码和xml将其更改为另一种
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;});