请,我的 JPA 查询是使用 CriteriaQuery 和 CriteriaBuilder 创建的,如下所示:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<TaskInfo> cq = cb.createQuery(TaskInfo.class);
Root<TaskInfo> from = cq.from(TaskInfo.class);
cq.select(from);
...
from.get("task").get("id").in(taskList)
...
我想确保我急切地加载整个对象图,以便稍后在我关闭 JPA 会话时我没有代理而不是对象。:TaskInfo->Task->TaskData->等等,直到对象 X .
一种方法是这样
for(TaskInfo ti : tiList){
ti.getTask().getTaskData().getSomethingElse().getX();
}
但这很糟糕,对吧?而且我一般不想更改获取,但仅针对此特定查询。我该怎么做?谢谢和欢呼
谢谢您的帮助。但是Task有一个属性
PeopleAssignments peopleAssignments
并且 PeopleAssignments 有一个属性
List<OrganizationalEntity> businessAdministrators
所以这行得通
from.fetch("task").fetch("peopleAssignments") // Returns a SingularAttributeJoin
但如果我这样做
from.fetch("task").fetch("peopleAssignments").fetch("businessAdministrators")
我得到:
java.lang.ClassCastException:org.hibernate.ejb.metamodel.SingularAttributeImpl 不能转换为 javax.persistence.metamodel.ManagedType
我想是因为这一次我试图获取 List。你知道如何解决这个问题吗?