1

JPAが次のシナリオを処理するためにどのように定義しているのだろうか。

Table A: | Table B:
ID  FK_B | ID
1   10   | 10
2   null | 12
3   11   |

FK_B NULLを含む、または使用できないテーブルBエントリを参照するすべてのテーブルAエントリが必要です。

public class A implements Serializable {
    @Id
    private Long id;

    @JoinColumn(name = "FK_B", nullable = true)
    @ManyToOne
    private B b;
}

public class B implements Serializable {

    @Id
    private Long id;
}

定義されていますか、使用するとどうなりますか

SELECT a FROM A a LEFT JOIN a.b WHERE a.b IS NULL

または:(これは可能ですか?)

SELECT a FROM A a LEFT JOIN B b on (b = a.b) WHERE b IS NULL

必要なのは、

A(id = 2)
A(id = 3)

どうもありがとう!

4

1 に答える 1

1

表Aの行#3は、定義上違法です。BID = 11の値がないA場合は、外部キー制約に違反しているため、テーブルにその行を含めることはできません。

Anullの場所からすべての行を取得する限りB、最初のクエリは機能するはずです。次のことも試すことができます。

SELECT a FROM A a WHERE a.b.id IS NULL

それが有効なJPAQL構文であるかどうかは100%わかりませんが(Hibernateで機能します)

于 2009-12-03T18:06:04.253 に答える