0
私はOneToMany
の関係を実装しようとしており、子レコードの選択に本当に苦労しています。例えばJPA OneToMany重複する子
:Parent
P1 3つのChild
エンティティとParent
を有するP2が2つのChild
エンティティを有し、
- P1はC1、C2、C3
- P2はC4、C6
を有していると言う。しかし以下のコードが返されます。
- P1はC1、C1、C1
- P2はC1、C1
は面白い子エンティティの数が正しいかありますが、データ自体はちょうど最初のレコードの複製です。私は別の設定を試みたが、それは助けに見えない。
CriteriaBuilder criteriaBuilder = db2EntityManager.getCriteriaBuilder();
CriteriaQuery<Parent> searchQuery = criteriaBuilder.createQuery(Parent.class);
Root<Parent> aRoot = searchQuery.from(Parent.class);
//Constructing list of parameters
List<Predicate> predicates = new ArrayList<>();
//Adding predicates in case of parameter not being null
predicates.add(criteriaBuilder.equal(aRoot.get("a"), "A"));
predicates.add(criteriaBuilder.equal(aRoot.get("b"), "B"));
predicates.add(criteriaBuilder.equal(aRoot.get("c"), "C"));
//query itself
searchQuery.select(aRoot).where(predicates.toArray(new Predicate[]{})).distinct(true);
TypedQuery<Parent> query = db2EntityManager.createQuery(searchQuery);
parentEntities = query.getResultList();
あなたは何を保持しているかを知る必要がありますか?そして最終的にデータベースには何が入っていますか?私は「別れた」とはあなたの問題とは何の関係もないと思います。なぜそれらの述語は、詳細を教えてください? – pirho
私はoneToManyデータを読み込み、何も格納しようとしていません。そのため、親エンティティPと子エンティティCは複合キーA、B、C、Dを共有します。述語はPのwhere条件です。基本的には、A、B、Cのid値を持つPにクエリを行い、A.Cの子レコードを取得しようとしています。 – Mjasmin
以下は、ログから「子クエリ」を簡略化したものです。子どもA、子B、子C、子A、子B、 child.X、child.Y、child.Z、from、MAIN.CHILD child ここでchild.D =?そして、子供.A =?そして子供.B =?子供= C =? – Mjasmin