Java 休眠具有多个条件的联接表,但@WhereJoinTable不起作用

Java 休眠具有多个条件的联接表,但@WhereJoinTable不起作用,java,mysql,hibernate,join,Java,Mysql,Hibernate,Join,有两个表A和B: A(id、b_id、A_其他) B(id,B_其他) A和B的相应类别如下所示: @Entity @Table(name = "A") public class A { @Id @Column(name = "id") private Integer id; @JoinColumn(name = "b_id", nullable = true) @OneToOne(fetch = FetchType.EAGER) @WhereJ

有两个表A和B:

A(id、b_id、A_其他)

B(id,B_其他)

A和B的相应类别如下所示:

@Entity
@Table(name = "A")
public class A {
    @Id
    @Column(name = "id")
    private Integer id;

    @JoinColumn(name = "b_id", nullable = true)
    @OneToOne(fetch = FetchType.EAGER)
    @WhereJoinTable(clause = "b_id > 0")
    private B b;

    @Column(name = "a_other")
    private Integer aOther;
} 

public class B {
    @Id
    @Column(name = "id")
    private Integer id;

    @Column(name = "b_other")
    private Integer bOther;
}
我想要的查询如下所示:
从A.B_id=B.id和A.B_id!上的左连接B中选择*0

您可能会发现的痛点是额外的连接条件A.b_id!=0

我将
@WhereJoinTable(clause=“b_id>0”)
附加到A类中,但它没有任何意义,因为我发现它根本不起作用

我将
@WhereJoinTable
更改为
@Where
,我没有发现任何更改,有人能帮我找出缺少的内容吗


提前谢谢。

如果您想要一个b\U id!=0,您可以添加以下批注

@Where(clause = 'b_id > 0')
因此,您的代码应该如下所示:

@Entity
@Table(name = "A")
public class A {
    @Id
    @Column(name = "id")
    private Integer id;

希望这对您有所帮助。

您所说的工作原理是
select*from A left join B on A.B_id=B.id其中A.B_id!=0
,当
A.b_id=0
时,我将一无所获,我想要的是
从A.b_id=b.id和A.b_id!上的左连接b中选择*0
,当
A.B_id=0
时,我将得到一个带有null B和notnull aOthers的对象A,这是不同的。但是,`Where(子句='B_id>0')`上面的字段不起作用,我在hibernate SQL日志中没有发现任何效果。您能否分享一个随机示例,就好像您得到的一样。。。。这应该行得通。你在@JoinColumn语句之后试过吗?我试过两个例子,下面是其中的一个日志:
选择a0.id作为id1\u 0\u,a0.a\u其他作为a\u其他2\u 0\u,a0.b\u id作为b\u id3\u 0\u,b1\u.id作为id1\u,b1\u.b\u其他作为b\u其他2\u 1\u 1\u从a0\u左侧外部连接到b\u id=b\u,其中,@Where子句无效。您是否在@JoinColumn之后写Where
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "b_id", nullable = true)
    @Where(clause = 'b_id > 0')
    private Audience audience;

    @Id
    @Column(name = "a_other")
    private Integer aOther;
} 

public class B {
    @Id
    @Column(name = "id")
    private Integer id;

    @Id
    @Column(name = "b_other")
    private Integer bOther;
}