我有以下情况,我有两个类/表:
public class Parent {
@Id
@Column(name="parent_id")
private Integer parentId;
@ManyToOne
@JoinColumn(name="child_id") //Notice here that i only specified one of the two id columns of the Child class
private Child child;
...
}
public class Child {
@Id
@Column(name="child_id")
private Integer childId;
@Id
@Column(name="alive")
private Boolean alive;
@Column(name="name")
private String name;
}
正如您所看到的,child
有两个主键,这意味着我可以在两行中使用相同的child_id
,一行alive=true
,另一行alive=false
,但我在父母身上没有alive
属性:
PARENT TABLE
parent_id | child_id
--------------------
500 | 1
CHILD TABLE
child_id | alive | name
--------------------------
1 | TRUE | DONALD
1 | FALSE | HILLARY
我希望hibernate生成插入alive
属性的join子句,仅在alive=true
时生成,例如:
select * from Parent inner join Child on Child.child_id=Parent.child_id and Child.alive=true
有没有办法做到这一点,所以当我执行像select p from Parent p
之类的查询时,它会按预期执行查询?
答案 0 :(得分:1)
对于Parent类,您可以使用
@JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT a.id
FROM Child c
WHERE c.child_id=child_id
and alive=true)",
referencedColumnName="child_id")
发布正确的评论作为答案