私はJPAの基準APIを使用して、このSQLクエリを実装しようとしているを使用して参加する:として右JPA基準API
SELECT F.* FROM PF right join F on F.FID = PF.FID WHERE PF.PFID is null;
も書き込むことができます。
public List<F> listFWithoutP() {
final CriteriaBuilder builder = getCriteriaBuilder();
final CriteriaQuery<F> query = builder.createQuery(F.class);
final Root<PF> from = query.from(PF.class);
Join<PF, F> join = from.join(PF_.f, JoinType.RIGHT);
query.select(join.get(PF_.f))
.where(builder.isNull(from.get(PF_.pFId)));
final TypedQuery<F> typedQuery = getEntityManager().createQuery(query);
return typedQuery.getResultList();
}
しかし、それは動作しません、私はこのラインで、次のエラーが表示されます。query.select(join.get(PF_.f))
The method get(SingularAttribute<? super F,Y>) in the type Path<F> is not applicable for the arguments (SingularAttribute<PF,F>)
どうすればこの問題を解決できますか?
更新:
これらは私の実体である:
public class F extends AbstractDomain<Long> {
@Id
@Column
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen")
private Long fId;
@Column(nullable = false)
private String lib;
}
public class PF extends AbstractDomain<Long> {
@Id
@Column
private Long pFId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(nullable = false)
private P p;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(nullable = false)
private F f;
}
アップデート2:
これは、JPAの基準APIによってサポートされていないJOIN RIGHTように思えるので、これを使用して行うことができます2番目のクエリ。
TRY 'TypedQuery queryTaskEntity = getEntityManager()からCreateQuery(F.class "F FROMはPF.FIDがnull F.FID = PF.FIDにPFを結合左");' –
@KlevinDelimetaありがとうございますが、私はこれを基準api –
を使って実行したいと思います。実際には「動作しません」と記述してください。期待どおりの値を持つ例外またはResultListを取得していますか? –