【问题标题】:What's flushed by Hibernate's Session.flush()Hibernate 的 Session.flush() 刷新了什么
【发布时间】:2011-09-16 09:47:58
【问题描述】:

当我在打开的休眠会话上调用 Session.flush() 时究竟会发生什么?我使用保存/更新/删除更改(持久、删除、更新)的所有实体是否都写入数据库,或者会话中的所有实体是否都写入数据库,如果我还没有调用更新等?

我发现很多 Hibernate 资源都在谈论这个问题,但没有什么能准确给出我正在寻找的确切答案。

一个简单的例子:

class A {

    @OneToOne
    public B b;

    public int x;
}

class B {

    @OneToOne(mappedBy="b")
    public B b;

    public int y;
}


// Example
A a = aDao.load(...);
a.x = 20;
b.y = 15;
aDao.update(a);

// Question: Will this update b's value to 15 in the database?
session.flush();

如果上面的例子中B会被更新,我该如何防止呢?

感谢您的帮助!

【问题讨论】:

    标签: java mysql hibernate jakarta-ee


    【解决方案1】:

    所有更改都写入数据库。您未创建/修改/删除的对象不会被保存。

    我不确定像 obj.setName(obj.getName()) 这样的事情会发生什么(即当您触摸一个属性但不更改它时)。

    【讨论】:

    • 他们不会。通过持久化类型检查对象是否相等(名称可能是字符串类型)
    • 一级缓存也被刷新,这一点很重要,因为它在长时间绘制的事务中变得很大。
    猜你喜欢
    • 2011-03-14
    • 2015-07-24
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2011-11-20
    相关资源
    最近更新 更多