[英]How to match a hibernate/JPA table without a foreign key
我想將一個屬性(虛擬地)映射到實體鏈接到另一個沒有外鍵並且不更改數據庫結構的實體。 已經存在映射到相關表的密鑰的getter。
現有數據庫。
表蛋
+----------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | 0 | |
| pid | varchar(60) | NO | | | |
表籃
+----------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | 0 | |
| pid | varchar(60) | NO | | | |
實體蛋
@SuppressWarnings("serial")
@Entity
@Table(name = "egg")
public class Egg implements java.io.Serializable {
private long id;
private String pid;
...
@Column(name = "pid")
public String getPid() {
return this.pid;
}
籃子的實體類似於已經設置為雞蛋的pid getter。
我想模擬一個連接。
LEFT JOIN egg ON basket.pid = egg.pid
表映射pid的表上沒有外鍵。
我試過在egg實體中創建一個籃子屬性。
例如
@JoinColumn(name = "pid", referencedColumnName = "pid", updatable = false, insertable = false)
public Basket getBasket(
當然hibernate抱怨表中沒有'basket'列。
如何獲得這個雞蛋的籃子?
嘗試使用@JoinColumnsOrFormulas
注釋。
這樣的事情應該有效:
@ManyToOne
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT b.id FROM Basket b WHERE b.pid = pid)", referencedColumnName="id")),
@JoinColumnOrFormula(column = @JoinColumn(name = "pid", referencedColumnName="pid"))
})
private Basket getBasket() {
return this.basket;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.