2011-03-30 228 views
2

我有以下的數據庫結構:Hibernate映射 - 映射到表

Table 1     Table 2 
                 Table 3 
tid_1 ----(many-to-one)---- tid_1       
....      tid_2 ----(one-to-many)---- tid_2 
                 tkey 
                 tvalue 

有沒有一種方法來創建一個類,通過Table 1定義,java.util.Map,關聯tkeytvalueTable 3?我對Hibernate相當陌生,在問之前,我嘗試過搜索和實驗,但什麼都沒有。任何幫助將不勝感激。

P.S. 如果這不會阻礙你,我寧願使用.hbm.xml風格。

回答

4

你可以聲明與tkey作爲重點一張地圖和一個實體映射到Table 3作爲一種價值:

@Entity 
public class Table1 { 
    @ManyToMany 
    @JoinTable(name = "Table2") 
    @MapKey(name = "key") 
    private Map<String, Table3> table3s; 

    ... 
} 

@Entity 
public class Table3 { 
    @Column(name = "tkey") 
    private String key; 

    @Column(name = "tvalue") 
    private String value; 

    ... 
} 
+0

感謝您的答覆。然而,如果我的理解正確,那麼使用地圖的好處將會丟失 - 值無法通過鍵來訪問。 – 2011-03-30 11:36:35

+0

@Frozen:您總是可以執行'table3s.get(key).getValue()'。 – axtavt 2011-03-30 11:46:07

+1

你也可以在Table1上寫一個getter,它返回一個包含table3s屬性的地圖,並給出'Map '的錯覺。它需要大量的樣板,但不難做到。您可以使用[Guava](http://code.google.com/p/guava-libraries/)的[Maps.transformValues](http://guava-libraries.googlecode.com/svn/tags/release08/ javadoc/com/google/common/collect/Maps.html#transformValues%28java.util.Map,%20com.google.common.base.Function%29)使它更簡單一些(但可能是隻讀的)。 – 2011-03-30 16:08:29