【发布时间】:2011-06-20 16:06:42
【问题描述】:
我有一个抽象 DAO 类,它使用参数化类型 E(实体)和 K(主键)。在每个实体中,我都有一个@NamedQuery。我想在不知道其确切名称和参数名称的情况下动态调用此命名查询。
例如,想象以下实体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);
}
}
我应该如何在AbstractDao中实现findByName()方法,这样我就不需要知道确切的名称和参数名称了?
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;
}
}
// ...
}
【问题讨论】:
标签: java hibernate jpa jpa-2.0