2012-07-03 27 views
5

我有兩個實體:JPA:如何從多個表中的列複合實體(未保存的實體多張表)

@Entity 
@Table(name="TableA") 
public class TableA { 
    @Id 
    @Column(name="id") 
    long id; 

    @Column(name="tableB_id") 
    long tbId; 

    @Column(name="column1", table="TableB") 
    String tbColumn1; 
} 

@Entity 
@Table(name="TableB") 
public class TableB { 
    @Id 
    @Column(name="id") 
    long id; 

    @Column(name="column1") 
    String column1; 
} 

表A有一個外鍵「tbId」到TableB.id。而TableB有一個名爲「column1」的列,現在我想通過某種連接在TableA實體中獲得「column1」。我應該用JPA的方式去做什麼?這不是OneToOne,因爲我不想連線TableA中的整個TableB實體。

+0

您是否考慮使用數據庫VIEW或JPA構造查詢? – JMelnik

+0

你只是想用它來閱讀,而不是修改,對吧? – JMelnik

+0

我認爲你需要@SecondaryTable註解:http://en.wikibooks.org/wiki/Java_Persistence/Tables#Multiple_tables – McIntosh

回答

10

如果你想一個對象中的組列僅讀取數據,我建議你兩種方式:

  1. 創建數據庫視圖並將其映射爲一個實體。
  2. 使用Result Classes Constructor Expression,它會基於結果查詢返回實例化並填充提供的類的對象。

從ObjectDB的結果類構造函數表達式:

JPA支持包裹JPQL查詢結果使用自定義 結果類的實例。這對於具有多個SELECT 表達式的查詢非常有用,其中自定義結果對象可以提供面向對象替代以表示結果作爲Object []元素的面向對象的 。