我有以下情况,其中有两个类/表:
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
时插入alive=true
属性的join子句,例如:select * from Parent inner join Child on Child.child_id=Parent.child_id and Child.alive=true
有没有办法做到这一点,所以当我执行类似
select p from Parent p
的查询时,它会按预期执行查询? 最佳答案
对于家长班,您可以使用
@JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT a.id
FROM Child c
WHERE c.child_id=child_id
and alive=true)",
referencedColumnName="child_id")
发表正确的评论作为答案