Java JPA 2一对一fetch=FetchType.EAGER不工作
在我的UserTbl实体中,我有Java JPA 2一对一fetch=FetchType.EAGER不工作,java,hibernate,jpa-2.0,criteria-api,Java,Hibernate,Jpa 2.0,Criteria Api,在我的UserTbl实体中,我有 @OneToOne( cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER ) private RetailPostUserTbl retailPostUser; @OneToOne( cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER ) private BackOfficeUser
@OneToOne( cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER )
private RetailPostUserTbl retailPostUser;
@OneToOne( cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER )
private BackOfficeUserTbl backOfficeUser;
但两者都是空的
用户必须至少属于其中一个或两者,但查询始终返回null
我试着像这样通过CriteriaAPI获取它
Root<UserTbl> root = cq.from( UserTbl.class );
root.fetch( UserTbl_.retailPostUser, JoinType.LEFT );
root.fetch( UserTbl_.backOfficeUser, JoinType.LEFT );
在保存或检索实体时,您一定是做错了什么,因为@OneToOne映射默认情况下FetchType是渴望的,您不必显式地提及它。 您是否尝试通过-
加载实体
entityManager.find();
如果上述方法起作用并返回包含所有映射对象的实体,请检查您的条件查询。这也会返回null,这就是我添加FetchType的原因。如果相反,请查看新的editsI做错了!因为它是在请求实际数据时加载对象的,而我是在内省实际发生之前进行断言的。
entityManager.find();