2012-09-12 266 views
2

我似乎在映射hibernate中的集合時存在問題,其中密鑰和資源都是由hibernate映射的實體。使用JPA批註在Hibernate中映射java.util.map <實體,實體

從文檔(我的這個問題的主要資源一直是這個,但我當然歡迎任何其他:http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html)它會出現這應該是一個相對簡單的任務,我似乎無法得到要堅持的地圖的關鍵。

,因爲它代表我的代碼如下所示:

父類:

@Entity 
public class Parent { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    @MapKey 
    @MapKeyClass(Key.class) 
    @ManyToMany(cascade = CascadeType.ALL) 
    private Map<Key, Resource> map; 

Key類:

@Table(name="ParentKey") 
@Entity 
public class Key implements Comparable<Key> { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    @Column(name = "hierarchyKey") 
    private int key; 

的資源類是一個相對簡單的POJO和持續正常,所以我會認爲這個問題不在這個班上。

我在hibernate論壇的某些文檔中遇到了批註@MapKeyManyToMany,但我相信這已經被棄用了。

在這個階段數據庫的架構並不重要,主要關心的是簡單地確保一切都保留在數據庫中。我們使用MySQL作爲底層數據庫。我相信你可以猜到,任何涉及單詞map,hibernate,entity和key的搜索都會返回大量與這個問題無關的問題,儘管我相信這肯定是一種發生的情況通常在映射情況方面。

我不經常提交問題,但我是一名活躍的讀者,所以如果需要更多信息,請告訴我。

+0

究竟是什麼問題? – axtavt

+0

@axtavt雖然資源仍然保留在數據庫中,但該鍵也應該保留,而不是。 –

回答

1

這按照指定的方式工作。操作不會級聯到地圖的關鍵。它們只與價值級聯。在documentation這種雜糅了下面的話:

當目標集合是一個java.util.Map,級聯元素 適用於映射值。

密鑰必須單獨保存。

+0

這確實使我走上了正確的軌道,你知道有一種方法來堅持與價值相同的方式的關鍵? –

+0

這當然有幫助,雖然不是一個完整的解決方案,但確實形成了我實施的最終解決方案的路徑,謝謝。 我最終重構了鍵,使Integer類型的鍵能夠保持級聯。 –