Hibernate JPA:仅为查询强制进行即时加载
请注意,我的JPA查询是使用CriteriaQuery和CriteriaBuilder创建的,如下所示: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("
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我想这是因为这次我试图获取列表。你知道怎么修吗?对不起,我不知道。