在flush()之后Hibernate没有更新数据库

May*_*Man 2 hibernate

我手动创建了我的数据库,然后使用Hibernate工具生成我的Pojo,DAO.当我创建一个对象并将其持久保存到数据库时,它似乎工作正常

        DefinitionT def = new DefinitionT();
        def.setSelected(false);
        def.setValue(sqlEncode(definition));
        def.setWordId(wordT.getId());
        definitionTDao.persist(def);
Run Code Online (Sandbox Code Playgroud)

这是我的persist()方法

public void persist(Object o)
{
    try
    {
        hSession.persist(o);
        hSession.flush();
    }
    catch (Exception e)
    {
        hTransaction.rollback();
        log.error(e.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

当我的线程完成时,数据库将使用新对象进行更新.但是,我注意到如果在调用persist()之后直接停止程序,则数据库将不会更新.事实上,无论我执行了多少操作,似乎没有任何东西似乎在DB中更新,直到线程完成.我以为flush()将hibernate缓存中的所有更新推送到数据库中?我错过了什么?我认为这是同样的问题,因为Hibernate flush不更新数据库,但我没有任何for循环继续.

Joh*_*nna 7

Flush意味着Hibernate会话最终命令SQL语句,然后将它们发送到数据库.然后,数据库执行它们(在回滚段中),但不会使修改持久化,也不会使其他用户可用.

提交最终让数据库持久存储修改.(例外情况是数据库处于自动提交模式 - 我不建议这样做,因为无法保证事务的正确性,并且自动提交不适用于所有数据库,或者如果刷新模式设置为提交 - 也不是必要的;失去灵活性.)

提交隐含地调用flush(),但flush不调用commit().

解决方案:在程序结束时进行额外提交.

(顺便说一下,通常在每次事务之后都会进行刷新,但是为了获得更好的性能,在许多事务之后进行提交.)