【发布时间】:2013-12-03 00:02:21
【问题描述】:
这里是场景。
我正在尝试获取资源层中的记录列表。它有以下代码;
PagedResponse<Person> pagedResponse= new PagedResponse<Person>();
有一个业务实现调用
pagedResponse = facadeLocator.getPersonFacade().findAllRecords(getUserId(), fromrow, maxrows);
现在在业务实现中,我使用命名查询作为;
Query query = getNamedQuery("Person.findAll");
我的回答是
pagedResponse = executePagedQuery(query, firstResults, maxResults);
在executePagedQuery()里面,我有;
List resultList = query.getResultList();
返回的响应 pagedResponse 是自定义类型的 PagedResponse 类,有 2 个成员;
private Long totalRecords;
private List<T> records;
现在在我的 Person 类中,我有
@NamedQuery(name = "Person.findAll", query = "Select DISTINCT(p.personName), p.personAge, p.personGender from Person p where p.personAge = :personAge")
现在这是运行时发生的事情。
我将“记录”作为Vector,成员作为
[0] = Object[]
[1] = Object[]
回到资源层,我想遍历响应并将其设置在列表中
List<Person> personList = new ArrayList<Person>();
那么我有什么选择。
我试过了
for(Object[] person: pagedResponse.getRecords()) {
Person p = new Person();
p.setPersonName((String)person[0]);
// Setting other values
personList.add(p);
}
但它说该行的类型不兼容
for(Object[] person: pagedResponse.getRecords()) {
补充一下,当我的查询没有返回选择列而是返回所有列时,我没有遇到任何类型不兼容的问题;
query = "SELECT p FROM Person p WHERE
所以我有 2 个问题;
1. Why was there no type casting issues when I was returning all the columns using the named query (It showed the type as "Person" and not generic type as showing after using the named query with specific columns)
2. Using the query with specific columns, what is the right approach to set the values returned from the query in the resource layer ?
【问题讨论】:
标签: java jpa arraylist resultset