亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Hibernate @OneToOne self join with OR in join 子句

Hibernate @OneToOne self join with OR in join 子句

絕地無雙 2023-05-10 13:13:06
我有一個@OneToOne注釋,我想加入 2 個可能的列。我知道如何使用普通 SQL 查詢來完成它,但我不知道這如何與休眠注釋一起使用。以下實體:@Entitypublic class Foo {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private int id;    @OneToOne    @JoinColumn(name = "cancelRecord")    private Foo cancelRecord;    private String externalId;    private String externalCancellationId;}以及相應的數據庫表:create table Foo(    id int identity(1,1) not null primary key, --primary key    cancelRecord int,    externalId varchar(100),    externalCancellationId varchar(100))到目前為止cancelRecord只加入了那個專欄?,F在我希望它加入cancelRecordor externalCancellationId。一個有效的 SQL 查詢是:SELECT f.* FROM Foo f         INNER JOIN Foo fo         ON (f.cancelRecord = fo.id         OR f.externalCancellationId = fo.externalId)這個查詢的關鍵部分是OR在連接子句中(f.cancelRecord = fo.id **OR** f.externalCancellationId = fo.externalId)。我認為這是不可能的,我需要以某種方式@JoinColumn依賴。@JoinFormula這個假設對嗎?如果是這樣,我是否只需要將上面的查詢復制為@JoinFormula?我試著用這個@JoinFoluma:@OneToOne@JoinFormula(value = "SELECT f.*         FROM Foo f         INNER JOIN Foo fo         ON (f.cancelRecord = fo.id         OR f.externalCancellationId = fo.externalId)")private Foo cancelRecord;
查看完整描述

2 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

這將不起作用,因為@JoinColumn@JoinFormula用于確定外鍵列值,因此它們不適用于多列。

如果定義多個@JoinColumnor @JoinFormula,則 ON 關系將使用 an ANDnot an OR。

在你的情況下,因為你可能只想讀取這個關聯,而不是使用 Hibernate 設置它,那么你最好改用 SQL 查詢。


查看完整回答
反對 回復 2023-05-10
?
森林海

TA貢獻2011條經驗 獲得超2個贊

您可以使用多個@JoinColumn注解。請參見下面的示例:


   @OneToOne

   @JoinColumns(

     {

       @JoinColumn(updatable=false,insertable=false, name="cancelRecord", referencedColumnName="cancelRecord"),

       @JoinColumn(updatable=false,insertable=false, name="other", referencedColumnName="other")

     }

   )

   private Foo cancelRecord;


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號