2012-06-06 73 views
2

我需要一些關於hibernate註釋的幫助。休眠註解Java地圖

我有以下2個實體:

public class Custom { 
private Map<KeyObject, ValueObject> properties; 

@oneToMany(mappedBy = "customId", cascade = CascadeType.All) 
@MapKey(name = "keyObject") 
public Map<KeyObject, ValueObject> getProperties(); 

..... 
} 

public class ValueObject { 
private KeyObject keyObject; 
private Long customId; 
private String value; 

...getters and setters 
} 

我有一個簡單的DAO類來保存,更新,選擇和刪除記錄。

如果我從自定義對象中的地圖中刪除記錄,然後調用customDao.save(自定義),我的更改永遠不會持久保存到數據庫。它也不會拋出任何錯誤。

我在hibernate示例中看到,我可以將customId定義爲Custom對象而不是KeyValue表中的Long,但我不想這樣做。

我是否設置了錯誤的實體?

回答

4

如果關聯具有mappedBy屬性,則表示:我不是此關聯的所有者。對Hibernate來說,對協會這一方所做的任何改變都是無關緊要的。重要的是協會的另一面。

我很驚訝這甚至可以,因爲我希望Hibernate會在另一端需要一個ManyToOne,類型爲Custom。但是可以肯定的是,如果你沒有在KeyValue/ValueObject中將custom/customId字段設置爲null,那麼Hibernate不會將此列設置爲null。

+0

感謝您的快速響應。我最初使用ValueObject Dao來將數據保存在地圖中。我遇到了一個問題,但。在我刪除一條記錄並嘗試添加一條記錄後,我得到一個HibernateOptimisticLockingFailureException,說明我的批處理已過時。我認爲這是因爲我使用ajax來更新地圖記錄,並且模型中的Custom對象從不刷新。 – blong824