JPA dactylographié requêtes de recherche
-
26-09-2019 - |
Question
J'ai un demandeur modèle assez grand:
public class Applicant{
private Long id
private String name;
...
...
}
Pour remplir une liste de sélection, je besoin d'une liste de (id, nom) tuples et j'utiliser cette requête de recherche:
public List getNames() {
Query query = em.createQuery("select a.id, a.name from Applicant a");
return query.getResultList();
}
Cependant, j'obtenir une liste des objets [] s et je ne veux pas vraiment de les convertir dans la couche d'affaires aux types (Long et String) correspondant. Quelle est la meilleure façon d'aborder ce sujet? Dois-je parcourir la liste et faire manuellement la conversion de type avant de le renvoyer? Ou devrais-je faire une classe d'aide:
public class ApplicantTuple{
public Long id
public String name;
public Application(Long id, String name) {
...
}
}
et ont une requête de recherche:
Query query = em.createQuery("select NEW my.model.ApplicantTuple(a.id, a.name) from Applicant a");
Ou est-il une meilleure façon de saisir des requêtes de recherche?
La solution
Puisque vous utilisez apparemment JPA2, utilisez les méthodes typées:
public List<Applicant> getApplicants() {
TypedQuery<Applicant> query = em.createQuery(
"select a.id, a.name from Applicant a",
Applicant.class
);
return query.getResultList();
}
Ensuite, il suffit d'utiliser les objets:
for(Applicant app: getApplicants()){
selectionList.populate(app.getName(), app.getId());
}