我有一個名爲Trade的實體可以映射到包含屬性的表。此實體也有一個字段,用於存儲來自另一個表的值。我的Trade表包含第二個表的主鍵。我知道如何在整個Trade實體中將整個第二個表作爲實體,但我只想要這1列。Hibernate從其他表中獲取列的值
@Entity
@Immutable
@Table(name = "Trade table")
@SecondaryTables(value = {
@SecondaryTable(name = "2nd table", pkJoinColumns = @PrimaryKeyJoinColumn(referencedColumnName = "id", foreignKey = @ForeignKey(name = "2ndtableID"))),
@SecondaryTable(name = "3rd table", pkJoinColumns = @PrimaryKeyJoinColumn(referencedColumnName = "id", foreignKey = @ForeignKey(name = "3rdtableID"))) })
public class TradeSearchResult {
@Id
@Column(name = "ID")
private Long primaryKey;
@Column(name = "col2", table = "2nd table")
private String valuefrom2ndtable;
@Column(name = "col3", table = "3rd table")
private String valuefrom3ndtable;
}
,你可以看到我試着用@SecondaryTables
,但聯接的樣品從貿易實體的PrimaryKey執行。我如何使用註釋從交易表中選擇外鍵,將它加入到第二/第三表,並直接從col2/col3中直接得到值?任何建議表示讚賞
表貿易:
ID col1 fk1 fk2
------------------------
1 abc 12 43
2 def 23 32
3 ghi 34 21
表2:
ID col2
----------
12 a
23 b
34 c
表3:
ID col3
-----------
43 d
32 e
21 f
現在我的貿易類應該具有的屬性:
Long id;
String col1;
String col2;
String col3;
Hibernate查詢:from Trade
應該給我在這個例子中3個交易與屬性:
Trade1: 1, "abc","a","d"
Trade2: 2, "def","b","e"
Trade3: 3, "ghi","c","f"
,我不希望只創建一個實體,以達到屬性col2
和col3
編輯:
select語句應該是這樣的:
select trade.ID,TICKET,table2.col2,table3.col2 from trade join table 3 on table3.ID=trade.FKtable3 join table2 on table2.ID=trade.FKtable2
如果我在sql server中執行這個語句,它會給我我想要的結果。我想映射我的類,以便hibernate生成此語句。
名單我有類似的情況。你是否終於找到了一種方法來連接另一個表的值而不用聲明一個描述另一個表的實體? – Cryptor
@Cryptor我使用了'Criteria' API並且以這種方式映射它。 'valuefrom2ndtable'是通過查詢內部的連接獲取的。請注意,我的TradeSearchResult不是直接映射到任何表,但是我的Trade類仍然是。 – XtremeBaumer