JPA Типизированные поисковые запросы - PullRequest
1 голос
/ 26 октября 2010

У меня довольно большая модель Заявитель:

public class Applicant{
 private Long id
 private String name;
 ...
 ...
}

Чтобы заполнить список выбора, мне нужен список (id, name) кортежей, и я использую этот поисковый запрос:

public List getNames() {
    Query query = em.createQuery("select a.id, a.name from Applicant a");
    return query.getResultList();

}

Однако я получил список Object [] и не очень хочу преобразовывать их на бизнес-уровне в соответствующие типы (Long и String). Каков наилучший способ приблизиться к этому? Должен ли я пройти по списку и вручную выполнить преобразование типа перед его возвратом? Или я должен сделать вспомогательный класс:

public class ApplicantTuple{
 public Long id
 public String name;

 public Application(Long id, String name) {
    ...
 }

}

, а затем запрос поиска:

Query query = em.createQuery("select NEW my.model.ApplicantTuple(a.id, a.name) from Applicant a");

Или есть лучший способ ввода поисковых запросов?

1 Ответ

2 голосов
/ 26 октября 2010

Поскольку вы, очевидно, используете JPA2, используйте безопасные от типа методы:

public List<Applicant> getApplicants() {
    TypedQuery<Applicant> query = em.createQuery(
        "select a.id, a.name from Applicant a",
        Applicant.class
    );
    return query.getResultList();
}

Затем просто используйте объекты:

for(Applicant app: getApplicants()){
    selectionList.populate(app.getName(), app.getId());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...