java - JPA 类型的搜索查询

标签 java jpa type-conversion jpa-2.0 jpql

我有一个相当大的模型申请人:

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

要填充选择列表,我需要一个(id,名称)元组列表,并且我使用以下搜索查询:

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");

或者有更好的方式来输入搜索查询吗?

最佳答案

由于您显然正在使用 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());
}

关于java - JPA 类型的搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4022267/

相关文章:

java - MyEclipse+Hibernate 不按 ID 对属性集排序?

Hibernate JoinColumn 默认名称缺失 '_id'

haskell - 在haskell中自动转换类型

java - 使用 Spring @Pattern 验证。什么正则表达式最多允许 7 位数字,最多保留 3 位小数

java - 列出已解析的 SQL SELECT 语句的所有表/列

java - Hibernate 自引用实体作为非空列

php - 在 PHP 中使用 === 比较而不是 == 比较

Java:将有符号的 Int_32(十六进制)转换为 Int

java - 使用java打印文件中每行16字节的二进制数据?

jpa - 如何使用 google guice 将服务注入(inject) hibernate.ejb.interceptor?