Абстрагирование именованных запросов в абстрактном JPA DAO

У меня есть абстрактный класс DAO, который использует параметризованные типы E (Entity) и K (Primary Key). В каждой сущности у меня есть @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);
    }   
}

Как мне реализовать метод findByName () в AbstractDao , чтобы я не нуждался в чтобы узнать точное имя и имя параметра?

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;
        }
    }

    // ...
}
10
задан Arjan Tijms 13 February 2011 в 10:30
поделиться