为什么我不能在休眠状态下更改flushmode

时间:2017-04-23 18:28:41

标签: java spring hibernate jpa spring-orm

  

org.springframework.dao.InvalidDataAccessApiUsageException:写   只读模式下不允许操作(FlushMode.MANUAL):转动   您的会话进入FlushMode.COMMIT / AUTO或删除'readOnly'标记   来自交易定义。

我尝试将其在代码和xml中更改为另一个flushmode,但它仍然是自动。

hibernatetemplate.getSessionFactory().openSession().setFlushMode(FlushMode.COMMIT);

<prop key="org.hibernate.FlushMode">COMMIT</prop>

3 个答案:

答案 0 :(得分:1)

在会话中,您的操作(其中一些是持久化或更新实体)很可能不在事务上下文中。

尝试将它们包含在:

Session session = hibernatetemplate.getSessionFactory().openSession();
Transaction tx = session.beginTrasaction();

...

tx.commit();
session.close();

现在,当您开始事务时,刷新模式应该隐式设置为COMMIT / AUTO。

答案 1 :(得分:1)

你可以创建hibernateTemplate对象并覆盖excute方法

答案 2 :(得分:0)

实际上我解决了它

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;
        }
    });