3

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

1 回答 1

2

您在保存或检索实体时一定做错了,因为@OneToOne 映射 FetchType 默认为 EAGER,您不必明确提及它。您是否尝试通过以下方式加载实体 -

entityManager.find();

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

于 2011-04-01T09:45:23.597 回答