3つのテーブル(Associate、Update、Detail)からいくつかのオブジェクトを取得する基準を作成しようとしています。ディテールにはAssociateおよびUpdateへの参照があり、UpdateにはDetailsのリストへの参照があります。私の目的は、アソシエートIDが指定されている場合、指定されたフィールドに少なくともNull値のDetailを持つ更新リストを取得することです。 JPQLでは簡単に行うことができましたが、クライアントはこれを基準でコーディングする必要があると言いました。Criteria JPA 2 with 3 tables
マイJPQLだった:
public List<Update> getUpdates(long associateId) {
TypedQuery<Update> query = em.createQuery("select distinct u from Update u, Detail dt, Associate a "
+ "where dt.update = u and dt.associate = a and a.associateId = :id and "
+ "dt.ack_date is null", Update.class);
query.setParameter("id", associateId);
return query.getResultList();
}
私は次のことを試してみましたが、それは単にデータベースにすべての更新を返さ:
public List<Update> getUpdates(long associateId) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Update> query = builder.createQuery(Update.class);
Root<Update> fromUpdates = query.from(Update.class);
Root<Associate> fromAssociate = query.from(Associate.class);
Root<Detail> fromDetail = query.from(Detail.class);
Join<Detail, Associate> associateJoin = fromDetail.join("associate");
Join<Detail, Update> updateJoin = fromDetail.join("update");
TypedQuery<Update> typedQuery = em.createQuery(query
.select(fromUpdates)
.where(builder.and(
builder.equal(fromAssociate.get("associateId"), associateId),
builder.equal(fromDetail.get("associate"), associateJoin),
builder.equal(fromDetail.get("update"), updateJoin),
builder.isNull(fromDetail.get("ack_date"))
))
.orderBy(builder.asc(fromUpdates.get("updateId")))
.distinct(true)
);
return typedQuery.getResultList();
}
誰も私を助けることができますか?私は検索しましたが、3つの実体を持つ例は見つかりませんでした。
が魅力のように働きました!これらの基準で私は狂っていましたが、これは多くの助けになりました!ありがとうございますperissf :) –