簡體   English   中英

如何在沒有外鍵的情況下匹配hibernate / JPA表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM