2016-06-30 7 views
1

に動作しませんAとBの対応するクラスのようです:Hibernateは複数の条件でのテーブルに参加しなく@WhereJoinTable

@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; 
} 

私が何をしたいのクエリは次のようである: select * from A left join B on A.b_id = B.id and A.b_id != 0

あなたは痛みのポイントが余分な条件A.b_idに参加するということであるかもしれません!= 0

私は、クラスAで上記のよう@WhereJoinTable(clause = "b_id > 0")を添付して、私はそれがで動作しない見つけるために、それは意味がありませんすべて。

私は@WhereJoinTableから@Whereに変更しましたが、何も変更されていないことが分かります。

ありがとうございます。

答えて

2

あなたはA.b_id = 0にしたい場合は、だからあなたのコードは次のようになります注釈

@Where(clause = 'b_id > 0') 

の下に追加することができます!

@Entity 
@Table(name = "A") 
public class A { 
    @Id 
    @Column(name = "id") 
    private Integer id; 
@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; 
} 

あなたを助けることを願っています。

+0

あなたが言っていたことは、 'select * from A from A.b_id = B.idどこにA.b_id!= 0'を残してBを残したか、' A.b_id = 0'のときは何も得られません。は、 'A * Bを左からBにバインドしてBを選択してB.bidとA.b_id!= 0'を選択したとき、' Aのb_id = 0 'のときはnullのオブジェクトAを取得します。 。 – Junjie

+0

Ahh ...それを得ました...私の答えを更新しました... –

+0

しかし、 '@Where(clause = 'b_id> 0')'フィールドは機能しません。私はhibernate SQLログには何の効果も見いだせません。 – Junjie

関連する問題