Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JPA:仅为查询强制进行即时加载_Hibernate_Jpa - Fatal编程技术网

Hibernate JPA:仅为查询强制进行即时加载

Hibernate JPA:仅为查询强制进行即时加载,hibernate,jpa,Hibernate,Jpa,请注意,我的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("

请注意,我的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)
...
但这很糟糕,对吧?一般来说,我不想更改抓取,只想更改这个特定查询的抓取。我怎么做?谢谢,干杯


谢谢你的帮助。但是 任务有一个属性

PeopleAssignments peopleAssignments
List<OrganizationalEntity> businessAdministrators
人们的签名有一个属性

PeopleAssignments peopleAssignments
List<OrganizationalEntity> businessAdministrators
但如果我这样做

from.fetch("task").fetch("peopleAssignments").fetch("businessAdministrators")
我得到:

java.lang.ClassCastException:org.hibernate.ejb.metamodel.SingularAttributeImpl不能强制转换为javax.persistence.metamodel.ManagedType

我想这是因为这一次我要去拿名单。您知道如何解决此问题吗?

您可以向查询中添加一个
fetch()
,以保证加载其他延迟链接对象,如第5.6.2章或第9.3.3章所述

Root<TaskInfo> from = cq.from(TaskInfo.class);
Join<TaskInfo, Task> task = from.fetch("task");
task.fetch("id");
...
Root-from=cq.from(TaskInfo.class);
Join task=from.fetch(“任务”);
任务获取(“id”);
...
我没有亲自测试它,所以我希望它能起作用。

您可以在查询中添加一个
fetch()
,以保证其他惰性链接对象的负载,如第5.6.2章或第9.3.3章所述

Root<TaskInfo> from = cq.from(TaskInfo.class);
Join<TaskInfo, Task> task = from.fetch("task");
task.fetch("id");
...
Root-from=cq.from(TaskInfo.class);
Join task=from.fetch(“任务”);
任务获取(“id”);
...

我没有亲自测试它,所以我希望它能起作用。

谢谢。但是Task有一个peoplessignments peoplessignments,peoplessignments有一个businessAdministrators列表,因此这可以从.fetch(“Task”).fetch(“peoplessignments”)//返回一个SingularAttributeJoin,但是如果我从.fetch(“Task”).fetch(“peoplessignments”).fetch(“businessAdministrators”)执行此操作我得到:java.lang.ClassCastException:org.hibernate.ejb.metamodel.SingularAttributeImpl不能转换为javax.persistence.metamodel.ManagedType我想这是因为这次我试图获取列表。你知道怎么修吗?对不起,我不知道。谢谢。但是Task有一个peoplessignments peoplessignments,peoplessignments有一个businessAdministrators列表,因此这可以从.fetch(“Task”).fetch(“peoplessignments”)//返回一个SingularAttributeJoin,但是如果我从.fetch(“Task”).fetch(“peoplessignments”).fetch(“businessAdministrators”)执行此操作我得到:java.lang.ClassCastException:org.hibernate.ejb.metamodel.SingularAttributeImpl不能转换为javax.persistence.metamodel.ManagedType我想这是因为这次我试图获取列表。你知道怎么修吗?对不起,我不知道。