我有一个看起来像这样的POJO
@AllArgsConstructor
public class POJO {
@Getter
@Setter
private String name;
@Getter
@Setter
private int age;
}
我使用此POJO来从hql查询中设置值,如
session.createQuery("Select new fullyQualifiedName.POJO(emp.name, emp.age) From Employee emp where emp.id = 1");
最近,有人要求我向POJO添加List属性。就像,
@AllArgsConstructor
public class POJO {
@Getter
@Setter
private String name;
@Getter
@Setter
private int age;
@Getter
@Setter
private List<Hobby> hobbies;
}
但是,在这一点上,我不知道如何加入Hobby表,获取值作为列表并传递给构造函数。
完成此操作的可能方法是什么?
我认为您不再可以通过new
关键字实现想要的功能。也许其他人可能对此结构更有用,但是我还没有看到任何示例提供带有new
关键字的集合。我认为此构造有一些局限性。
至于我提出的解决方案:
将查询更改为Select emp, h From Employee emp left join Hobby h where emp.id = 1
。您还可以根据使用情况使用内部联接。
为查询对象设置自定义ResultTransformer。类似于:
query.setResultTransformer(
new ResultTransformer() {
@Override
public Object transformTuple(Object[] tuple, String[] aliases) {
return tuple;
}
@Override
public List transformList(List collection) {
//Each member of collection is a Object[], we are working at row level
//You should process the collection, eliminate duplicates etc and return a
//List containing a single POJO object
}
}
);