JPA を使用してデータベースにアクセスするために、汎用実装で抽象基本クラスを使用します。エンティティ メタ モデルも使用します。
public List<PersonEntity> findByCode(String code) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<PersonEntity> cq = cb.createQuery(PersonEntity.class);
Root<PersonEntity> root = cq.from(PersonEntity.class);
Predicate predicate = cb.equal(root.get(PersonEntity_.code), code);
cq.where(predicate);
TypedQuery<PersonEntity> query = entityManager.createQuery(cq);
List<PersonEntity> list = new ArrayList<>();
return query.getResultList();
}
この平和なコードは何度も使用されるため、これを汎用基本クラスに移動したいと考えています。「コード」があるかどうかを確認するにはどうすればよいですか?すべてのクラスに 1 つあるわけではありません。
public List<E> findByCode(String code) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<E> cq = cb.createQuery(entityClass);
Root<E> root = cq.from(entityClass);
//here is my problem: how to check if there is a "code"?
// Most classes have one, but not all.
Predicate predicate = cb.equal(root.get(PersonEntity_.code), code);
cq.where(predicate);
TypedQuery<E> query = entityManager.createQuery(cq);
List<E> list = new ArrayList<>();
return query.getResultList();
}