我有以下情况:
openSession()
tx = session.beginTransaction();
try
{
...
session.saveOrUpdate(obj_1);
...
session.saveOrUpdate(obj_2);
...
session.saveOrUpdate(obj_3);
session.flush();
tx.commit();
}
catch()
{
tx.rollback()
}
finally
{
session.close();
}
第一次调用 saveOrUpdate(obj_1) 将因重复条目错误而失败。但这个错误实际上不会发生,直到在 session.flush() 结束时访问数据库。
有没有办法让这种错误尽早发生,让我有更多机会正确处理它?
我也不想将事务削减得太小,因为很难回滚。
我的 Hibernate 实体与现有数据库架构相反。
我已在配置文件中禁用缓存:
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
编辑:
我的问题是如何尽早发现错误(如果有)。错误本身对我来说并不重要。
现在错误发生在最后,但它实际上发生在第一次访问时。
最佳答案
您可以在每次 session.saveOrUpdate
之后执行 session.flush()
来强制 hibernate 在数据库上执行更新或插入。如果没有刷新命令,实际的数据库操作将被推迟,并且只会在结束事务之前立即进行处理。
这样您就不必更改交易规模。
关于java - Hibernate中什么时候调用flush()和commit()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737145/