2011-09-13 12 views
0

假設實體類Foo和Bar這樣的:什麼級聯使用,只保存多對多映射的孩子列表?

class Foo { 

    @ManyToMany 
    @JoinTable(name = "FooBar", 
     joinColumns = @JoinColumn(name = "foo"), 
     inverseJoinColumns = @JoinColumn(name = "bar")) 
    public List<Bar> getBars() { 
     return bars; 
    } 

} 

class Bar { 
    // ... 
} 

當我保存一個Foo實體,我要救酒吧名單也不過才映射列表,例如:

Bar oldBar = foo.getBars().get(0); 
oldBar.setSomething("new-value"); // Change to the entity. 

Bar newbar = new Bar(); 
foo.getBars().add(newbar); // Change to the list. 

saveOrUpdate(foo); 

我想saveOrUpdate將更改保留到列表中,但不會更改爲實體。我可以嗎?

回答

2

CascadeType.PERSIST有點做你想做的,但它取決於你的foo對象的開始狀態。如果舊foo處於受管理狀態,那麼您對oldBar所做的更改將保持不變。這不能真的被「關閉」。如果它不應該被改變,爲什麼你會改變持久對象的值?它在ORM上下文中沒有意義。

+0

嗯,我不想改變oldBar,但它的屬性被觸動,所以也許變髒。它的'lastModifiedDate'由一些實用函數更新。 –

+1

對。我所說的是,如果一個實體的持久性字段發生變化,那麼期望這些變化進入數據庫。如果它對於不應該在數據庫中出現的事情變得「骯髒」,那麼這是設計中更高層次的問題。 – Affe