如何在hibernate join映射上指定固定参数?

时间:2016-11-21 12:21:43

标签: java hibernate mapping

我有以下情况,我有两个类/表:

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之类的查询时,它会按预期执行查询?

1 个答案:

答案 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") 

发布正确的评论作为答案