1

エンティティ間に 1 対多の関係があります。この JPQL クエリを実行する場合:

SELECT 親 FROM 親 親 JOIN 親.子 子 WHERE ...

親に2人の子供がいる場合は重複レコードを取得し、親に1人の子供がいる場合は1つだけ、子供がいない場合はレコードを取得しません(子供がいない場合はなし)。SQL データベースには Parent の重複がないことに注意してください。

エンティティは次のように宣言されます。

@Entity(...)
public class Parent {

    @Id
    Long parentId;

    @OneToMany(mappedBy = "parentID")
    List<Child> children;
}

@Entity(...)
public class Child {a

    Long parentId;
}

簡潔にするために多くのコードを省略しましたが、これにより、私が何をしようとしているのかについての強いアイデアが得られるはずです。クエリから返された子と一緒に親のリストが必要なため、関係は親の側で定義されていることに注意してください。

4

1 に答える 1

1

DISTINCT次のキーワードを使用して、重複を取り除くことができます。

SELECT DISTINCT parent FROM Parent parent JOIN parent.child child WHERE ...

編集:DISTINCTキーワードは、これらの重複が存在する理由に関係なく、クエリ結果から重複を削除するために使用されます。場合によっては、DB エントリが重複していることが原因です。しかし、より多くの場合、重複はJOINステートメントの結果であるため、ユースケースは完全に正当です。

DISTINCTただし、リレーションを双方向にすることで、明示的な結合とキーワードを回避できます。次に、ナビゲーションを通じて暗黙的な結合を使用できます。

SELECT parent FROM Parent parent WHERE parent.children...
于 2013-05-02T15:11:04.663 に答える