2010-10-26 3 views
1

У меня есть довольно большая модель Заявителя:JPA типизированные Поисковые запросы

public class Applicant{ 
private Long id 
private String 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"); 

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

ответ

2

Так как вы, по-видимому, используя 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()); 
} 
+0

Что происходит с другими полями Заявителем объекта? Они не получают? И возможно ли это, когда я использую объединение и запрос для полей из двух таблиц/сущностей? –

+0

Да, другие поля получаются, если только они не настроены как ленивые. –

+0

Однако это делает ненужный объемный результат, не так ли? –

Смежные вопросы