私は非常に基本的な質問がありますが、正しい解決策を見つけることはできません。 JPAEntityのクラスへの参照のみを持つCriteriaQueryを使用して、JPAEntityのすべてのレコードを読みたいと思います。それぞれのJPAEntitesで動作するはずです。異なるエンティティのCriteriaQuery
folowingコードが動作し、それは私が欲しいものを行います。
private void test(Field jpaField) {
List l;
final Class c = jpaField.getType();
final CriteriaQuery criteriaQuery = em.getCriteriaBuilder().createQuery(c);
criteriaQuery.select(criteriaQuery.from(c));
l = em.createQuery(criteriaQuery).getResultList();
...
}
しかし、私はタイプのセイフティに関する多くの警告を取得します。
private void test(Field jpaField) {
List<?> l;
final Class<?> c = jpaField.getType();
final CriteriaQuery<?> criteriaQuery = em.getCriteriaBuilder().createQuery(c);
criteriaQuery.select(criteriaQuery.from(c));
l = em.createQuery(criteriaQuery).getResultList();
...
}
この問題を解決するために、以下の修正を試みましたが、タイプが一致しない場合にエラーが発生しました。私は何とかcreateQuery(c)とfrom(c)が同じ型を使用することを保証しなければならないと思います。しかし、私は方法を知らない。誰もこのパターンを正しく使う方法を知っていますか?
ありがとうございます。
ドミニク
しかし、 'Field'は' Entity'ではありませんか? –
説明に欠けている部分があります。この例のjpaFieldは、他のエンティティを指すManyToOneフィールドです。したがって、jpaField.getType()と結果として、変数cはJPA-Entityです。あなたはフィールドを忘れて、クラスcをJPA-Entityクラスとして取ることができます。それは残念です。 wirttenとして:コードは、型を指定するのではなく警告を指定しない限り動作します。 – Dominic