2
私はすべての旅は、これらの述語のいずれかに一致する取得したいJPA基準のAPIを使用してクエリ書いている:すべての旅(MasterTravels)を取得JPA Critieraクエリは3を使用してOR述語結合が
- をそのI最初
最後の結合のために新しいルートを作成する必要がありますか、または以下の結合1と結合2をどのように組み合わせることができますか?
CriteriaQuery<MasterTravel> q = cb.createQuery(MasterTravel.class);
Root<MasterTravel> root = q.from(MasterTravel.class);
// Joins 1, these works fine
Join<MasterTravel, MTT> mtts = root.join(MasterTravel_.mtt);
Join<MTT, Travel> travels = mtts.join(MTT_.travel);
Join<Travel, Passenger> passengers = travels.join(Travel_.passengers);
// Joins 2, this doesn't work
Join<MasterTravel, MasterTravelApplication> application = root.join(MasterTravel_.applications);
Predicate p = cb.or(
cb.equal(passengers.get(Passenger_.user), user),
cb.equal(root.get(MasterTravel_.owner), user),
cb.equal(application.get(MasterTravelApplication_.user), user)); // When I add this it stops working
q.select(root);
q.where(p);
q.orderBy(cb.desc(root.get(MasterTravel_.createdTimestamp)));
q.distinct(true);
List<MasterTravel> resultList = em.createQuery(q).getResultList();
はい、申し訳ありません。私は、MasterTravelApplicationがMasterTravelの@OneToManyとしてマップされていることを忘れていました。内側の結合の代わりに左の結合で、それは美しく動作します、ありがとう! – Jonas
@Jonasそれが解決策であれば。あなたは何をしましたか? – feder