2012-03-07 142 views
3

我知道,@SecondaryTable問題發表了很多次,所以,如果有相同的(我還沒有找到它),請給我鏈接或建議。休眠:@SecondaryTable不起作用

我在我的數據庫(firstTablesecondTable)兩個表中,兩個POJO Hibernate類(FirstTablePojoSecondTablePojo)。

+----------+    +-----------+ 
|firstTable|    |secondTable| 
|----------+    |-----------+ 
|featureId |------------>|featureId |(secondTable's primary key) 
|foo  |    |featureName| 
|bar  |    +-----------+ 
+----------+ 

我想表明從從單一的列表對象的JSP這兩個表中的字段,我決定使用@SecondaryTable。這兩個表通過featureId字段連接(這是secondTable的主鍵),我想要secondTable中的featureName與來自firstTable的字段一起顯示。該FirstTablePojo由該註釋之前:

@SecondaryTable(name="secondTable", 
    [email protected](name="featureId", 
             referencedColumnName = "featureId")) 

我加入這個屬性來FirstTablePojo(與getter和setter):

@ManyToOne 
@JoinColumn(name="featureId", table="secondTable") 
String featureName; 

當的<c:forEach items="${features}" var="feature">幫助,我得到各個${feature.foo}foo是在我使用@SecondaryTable)和${feature.featureName}之前在FirstTablePojo中的房產,我看到每個foo,但是沒有出現featureNames。如果有人能告訴我我在這裏錯過了什麼以及爲什麼來自另一張桌子的功能名不出現在FirstTablePojo對象列表中,那將會很棒。

+0

你如何解決你的問題?我處於相同的情況...... – davioooh 2012-05-03 09:16:14

+0

'featureId'是主表中的主鍵?或「secondTable」的外鍵? – davioooh 2012-05-03 09:31:45

+0

@davioooh哦,同時我發佈了這個問題http://stackoverflow.com/questions/9627102/selecting-from-two-tables-in-hibernate,所以他們可能是大約相同的表。 – 2012-05-03 09:49:00

回答

7

註釋@SecondaryTable的要點是將單個實體的字段映射到多個表,就好像這些表合併成一個表一樣。

@ManyToOne用於映射兩個實體之間的多對一關聯。但你只有一個。在這種情況下沒有意義。 @JoinColumn用於指示一個字段被映射到構成... join列的列,即另一個表的外鍵。所以它也沒有意義。

只需使用下面的映射:

@Column(name="featureName", table="secondTable") 
String featureName; 

這很好解釋的,用一個例子,在Hibernate documentation