2011-06-16 62 views
1

当我在开放的hibernate会话中调用Session.flush()时会发生什么?我更改了所有实体(保留,删除,更新),并将保存/更新/删除写入数据库,或者会话中的所有实体都写入数据库,并且如果我没有对它们调用更新等?什么是由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将在上面的例子中被更新,我怎样才能防止它?

感谢您的帮助!

回答

4

全部变化被写入数据库。没有创建/修改/删除的对象不会保存。

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

+1

他们不会。通过persister的类型检查对象是否相等(可能是字符串类型的名称) – bestsss 2011-06-16 13:55:10

+1

另外,第一级高速缓存刷新也很重要,因为它在长时间绘制的事务中变得很大。 – bestsss 2011-06-16 13:58:40

相关问题