在我的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();

如果上述方法有效并返回具有所有映射对象的实体,则检查您的条件查询。

10-02 00:36