何时在Hibernate中调用flush()和commit()?

时间:2015-04-19 23:33:31

标签: java hibernate

我有以下情况:

        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>   

修改

我的问题是如何尽可能早地得到错误。错误本身并不重要。

现在错误发生在最后,但它确实发生在第一次访问时。

2 个答案:

答案 0 :(得分:2)

您可以在每个session.flush()之后执行session.saveOrUpdate以强制hibernate执行更新或插入数据库。如果没有flush命令,实际的数据库操作将被延迟,并且只会在结束事务之前立即处理。

这样您就不必更改交易的大小。

答案 1 :(得分:-2)

您可以在每个session.saveOrUpdate之后执行Surendran,强制hibernate执行更新或插入数据库。如果没有flush命令,实际的数据库操作将被延迟,并且只会在结束事务之前立即处理。

这样您就不必更改交易规模。