Tengo una clase DAO abstracta que usa tipos parametrizados E
(Entidad) y K
(Clave principal). En cada entidad tengo un @NamedQuery
. Quiero invocar dinámicamente esta consulta con nombre sin saber su nombre exacto y el nombre del parámetro.Resumen de consultas con nombre en un resumen JPA DAO
Como ejemplo, imaginemos la siguiente entidad City
@Entity(name="CITY")
@NamedQuery(
name="findCityByname",
query="FROM CITY c WHERE name = :CityName"
)
public class City {
// ...
}
y esto CityDao
public class CityDao extends AbstractDao<City, Long> {
public CityDao() {
super(City.class);
}
}
¿Cómo debo aplicar el método findByName()
en AbstractDao
modo que no necesito saber la exacta nombre y nombre del parámetro?
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;
}
}
// ...
}
que está golpeando el concepto 'yo quiero vivir con el concepto de tipo de mota ... –