Logiciel de saisie des requêtes nommées dans un résumé, DAO, JPA

J'ai un résumé de DAO classe qui utilise le type paramétré E (Entité) et K (Clé Primaire). Dans chaque entité, j'ai un @NamedQuery. Je veux invoquer dynamiquement cette requête nommée sans connaître son nom exact et le nom du paramètre.

Comme un exemple, imaginer la suite de l'entité City

@Entity(name="CITY")
@NamedQuery(
    name="findCityByname",
    query="FROM CITY c WHERE name = :CityName"
)
public class City { 
    //...
}

et ce CityDao

public class CityDao extends AbstractDao<City, Long> {
    public CityDao() {
        super(City.class);
    }   
}

Comment dois-je mettre en œuvre les findByName() méthode dans AbstractDao de sorte que je n'ai pas besoin de connaître le nom exact et le nom du paramètre?

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

    //...
}

OriginalL'auteur yoav.str | 2011-02-03