Tôi có lớp DAO trừu tượng sử dụng các loại tham số E
(Pháp nhân) và K
(Khóa chính). Trong mọi thực thể tôi có @NamedQuery
. Tôi muốn tự động gọi truy vấn được đặt tên này mà không biết tên chính xác và tên thông số của nó.Tóm tắt các truy vấn được đặt tên trong JPA DAO trừu tượng
Như một ví dụ, hãy tưởng tượng thực thể sau City
@Entity(name="CITY")
@NamedQuery(
name="findCityByname",
query="FROM CITY c WHERE name = :CityName"
)
public class City {
// ...
}
và điều này CityDao
public class CityDao extends AbstractDao<City, Long> {
public CityDao() {
super(City.class);
}
}
Làm thế nào tôi nên thực hiện phương pháp findByName()
trong AbstractDao
vì vậy mà tôi không cần phải biết chính xác tên và tên thông số?
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;
}
}
// ...
}
nó sẽ đưa ra khái niệm 'Tôi muốn sống với loại khái niệm ... –