我有一个@OneToOne注释,我想加入 2 个可能的列。我知道如何使用普通 SQL 查询来完成它,但我不知道这如何与休眠注释一起使用。
以下实体:
@Entity
public 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只加入了那个专栏。现在我希望它加入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;
杨__羊羊
森林海
相关分类