在我的UserTbl实体中,我有这个
@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。
我尝试通过像这样的标准api获取它
Root<UserTbl> root = cq.from( UserTbl.class );
root.fetch( UserTbl_.retailPostUser, JoinType.LEFT );
root.fetch( UserTbl_.backOfficeUser, JoinType.LEFT );
但它们仍然是空的。
为什么这不起作用?
反向工作正常,例如
在RetailPostUserTbl中,这是有效的
@OneToOne( optional = false, cascade=CascadeType.REMOVE )
@PrimaryKeyJoinColumn
private UserTbl user;
答案 0 :(得分:2)
在保存或检索实体时,您必须做错事,对于@OneToOne映射,FetchType默认为EAGER,您不必明确提及它。
您是否尝试通过 -
entityManager.find();
如果上述方法有效,则返回包含所有映射对象的实体,然后检查条件查询。