如何通过Java中的JPA2.1获得同时包含属性和列表的多选结果?
目标是使用multiselect获取员工的名字、姓氏和待办事项列表:如何通过Java中的JPA2.1获得同时包含属性和列表的多选结果?,jpa,one-to-many,projection,Jpa,One To Many,Projection,目标是使用multiselect获取员工的名字、姓氏和待办事项列表: CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Tuple> q = cb.createTupleQuery(); Root emp = q.from(Employee.class); q.multiselect( emp.get("firstName").alias("fname"), emp.get("lastName")
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = cb.createTupleQuery();
Root emp = q.from(Employee.class);
q.multiselect(
emp.get("firstName").alias("fname"),
emp.get("lastName").alias("lname"),
emp.get("toDoList").alias("toDoList")
).where(cb.equal(emp.get("id"), 12345));
List<Tuple> tuples = em.createQuery(q).getResultList();
Iterator<Tuple> iter = tuples.iterator();
while(iter.hasNext()){
Tuple t = iter.next();
//t.get("fName"); // returns String
//t.get("lName"); // returns String
//t.get("toDoList"); // returns String
//?????
//...
}
现在,我正在寻找一种聪明的方法来创建一个员工的实例,并设置其firstName、lastName和toDoList一次:
Employee employee = new Employee();
employee.setFirstName(...);
employee.setLastName(...);
employee.setToDoList(...);
最好的方法是什么?如果我添加额外的关系(如FavoriteShongs),事情会变得更加复杂。不幸的是,您必须为multiselect调用的每个组合编写代码,才能从元组列表中获取数据,而这些代码可能非常脏 使用一个查询获取关系存在主要缺点:
- 用于读取数据的java代码将变得非常脏
- 一个查询乍一看性能不错,但这将为每个获取的行检索重复的数据
Employee employee = new Employee();
employee.setFirstName(...);
employee.setLastName(...);
employee.setToDoList(...);