Hibernate的Session.flush()刷新了什么

时间:2011-06-16 13:48:58

标签: java mysql hibernate java-ee

在开放的hibernate会话中调用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将在上面的示例中更新,我该如何防止它?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

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

我不确定obj.setName(obj.getName())之类的事情会发生什么(例如,当您触摸某个属性但不更改它时)。