私は、パラメータ化された型E
(Entity)とK
(主キー)を使用する抽象DAOクラスを持っています。すべてのエンティティで私は@NamedQuery
を持っています。正確な名前とパラメータ名を知らなくても、この名前付きクエリを動的に呼び出すことができます。抽象JPA DAOで名前付きクエリを抽象化
例として、以下のエンティティを想像し、私は正確に知っている必要はありませんので、AbstractDao
でfindByName()
メソッドを実装する必要がありますどのようCity
@Entity(name="CITY")
@NamedQuery(
name="findCityByname",
query="FROM CITY c WHERE name = :CityName"
)
public class City {
// ...
}
このCityDao
public class CityDao extends AbstractDao<City, Long> {
public CityDao() {
super(City.class);
}
}
名前とパラメータ名?
public abstract class AbstractDao<E, K> implements Dao<E, K> {
@PersistenceContext
protected EntityManager entityManager;
protected Class<E> entityClass;
protected AbstractDao(Class<E> entityClass) {
this.entityClass = entityClass;
}
@Override
public E findByName(String name) {
try {
return (E) entityManager
.createNamedQuery("findCityByName")
.setParameter("CityName", name)
.getSingleResult();
} catch(Exception e) {
return null;
}
}
// ...
}
... –