我使用JPA Query获得了如下结果:
String query = "Select dataId, dataName, dataValue, datadesc From Data";
Query q = entityManager.createQuery(query).setMaxResults(10);
List<Object[]> dataList = q.getResultList();
请注意,我不想选择所有字段,例如“从数据d中选择d”。我将选择以下字段: “dataId,dataName”,“dataId,dataName,datadesc”
我需要遍历上面的dataList并根据字段类型对每个元素进行类型转换:
我的数据实体类如下:
public class Data{
private Long permitId;
private String permitNumber;
private Date permitDate;
}
我按照以下方式进行了投射:
for (Object[] object : dataList) {
Data d = new Data();
d.setDataId((Long)object[0]);
d.setDataName((String)object[1]);
...
}
但我想把这个演员视为动态:
for (Object[] object : dataList) {
Data d = new Data();
**for (Field field : Data.class.getDeclaredFields()) {
if (field.getName().equals("dataId")) {
d.setDataId(**(field.getType())**object[0]);
}
if (field.getName().equals("dataName")) {
d.setDataName(**(field.getType())**object[1]);
}**
...
}
无论如何要实现这个目标吗?
答案 0 :(得分:0)
您可以创建DTO并在查询中使用它,例如:
String query = "Select new com.package.MyDto(dataId, dataName, dataValue, datadesc) From Data";
Query q = entityManager.createQuery(query).setMaxResults(10);
List<MyDto> dataList = q.getResultList();
MyDto课程:
class MyDto {
// fields
MyDto(Long dataId, String dataName, Long dataValue, String datadesc) {
this.dataId = dataId;
this.dataName = dataName;
this.dataValue= dataValue;
this.datadesc= datadesc;
}
//getters
}