JPA 2一对一提取= FetchType.EAGER无法正常工作

时间:2011-04-01 09:17:02

标签: 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 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;

1 个答案:

答案 0 :(得分:2)

在保存或检索实体时,您必须做错事,对于@OneToOne映射,FetchType默认为EAGER,您不必明确提及它。 您是否尝试通过 -

加载实体
entityManager.find();

如果上述方法有效,则返回包含所有映射对象的实体,然后检查条件查询。