在我的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;
最佳答案
保存或检索实体时,您必须做错了什么,对于@OneToOne映射,默认情况下FetchType是EAGER,而不必明确提及。
您是否尝试通过以下方式加载实体:
entityManager.find();
如果上述方法有效并返回具有所有映射对象的实体,则检查您的条件查询。