【问题标题】:Why is data stored to database after session.setFlushMode(FlushMode.MANUAL); session.save(); (hibernate)为什么在 session.setFlushMode(FlushMode.MANUAL); 之后数据存储到数据库中session.save(); (休眠)
【发布时间】:2017-07-11 12:52:56
【问题描述】:

我有下一个代码:

    Color color = new Color(null,"B12",null,1);

    Session session=sessionFactory.openSession();
    session.setFlushMode(FlushMode.MANUAL);

    session.beginTransaction();
    session.save(color);
    session.clear();

    session.getTransaction().commit();

    session.close();

    sessionFactory.close();

我只是不明白为什么当我指定刷新是手动的时数据存储到数据库中?请帮我弄清楚!

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    原因是 session.getTransaction().commit() 将所有更改保存到数据库。请参阅此 stackoverflow 帖子。

    HIbernate commit() and flush()

    flush 用于在提交之前将项目推送到数据库。

    【讨论】:

    • 你看我读了一本书,它叫做“JAVA 持久性与 HIBERNATE”Christian Bauer,Gavin King,这里有一个句子:“通过选择 FlushMode.MANUAL,你可以指定只有显式调用flush() 导致托管状态与数据库同步”。在我的代码示例中,没有明确调用flush(),那么为什么它仍然存储到数据库中,也许还有其他我不知道的东西?
    • 通常调用数据库会自动刷新。 Flushmode.MANUAL 的行为类似于引用的句子。提交具体意味着将更改保存到数据库。这是更好的描述stackoverflow.com/questions/14622962/…
    • 谢谢,我想我明白了,但仍然有一点问题,我在 session.save() 之后通过 edding session.clear() 编辑了我的代码。文档中关于 clear() 方法的说明如下:“驱逐所有加载的实例并取消所有挂起的保存、更新和删除”。为什么它不取消 save() 并且仍然将数据存储到数据库?
    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多