在JPA 2.1中,我需要将JPQL查询的结果转换为自定义POJO对象。
我知道以下解决方案,但我无法使用它,因为我没有本机SQL查询。
@Entity
@Table("USER_T")
@SqlResultSetMapping(name="SearchResult", classes = {
@ConstructorResult(targetClass = InternalUser.class,
columns = {@ColumnResult(name="userId"), @ColumnResult(name="firstName"),
@ColumnResult(name="lastName"), @ColumnResult(name="role")
})
})
然后在我的DAO课程中,
javax.persistence.Query query = entityManager.createNativeQuery(jpql, "SearchResult");
如果我尝试这种方法,我会得到SQL异常,因为jpql
变量不是本机SQL。它包含一个JPQL表达式,它允许一些“额外”,比如在Where子句或Order-By中指定自定义字段。
所以我需要createNativeQuery(strQuery, strMapping)
而不是createQuery(strQuery, strMapping)
- 而不是{...}}。有什么建议?我仍然需要将结果转换为自定义POJO。
答案 0 :(得分:0)
根据JB Nizet的提示,JPQL自动转换语法是
private static final String SEARCH_JPQL = "select new mydomain.InternalUser( " +
" users.id as userId, " +
" abc.preferredFirstname as firstName, " +
" abc.preferredLastname as lastName, " +
" users.role as role ) " +
" from ... "
Select中的类名是接收结果集的POJO。 但必须有一个构造函数来支持它。所以我添加了
public InternalUser(String userId, String firstName, String lastName, String role) {
this.userId = userId;
this.firstName = firstName;
this.lastName = lastName;
this.role = role;
}