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です。

ユーザーはそれらの少なくとも1つまたは両方に属している必要がありますが、クエリは常にnullを返します。

私はこのような基準APIを介してそれをフェッチしようとしました

    Root<UserTbl> root = cq.from( UserTbl.class );
    root.fetch( UserTbl_.retailPostUser, JoinType.LEFT );
    root.fetch( UserTbl_.backOfficeUser, JoinType.LEFT );

しかし、それらは常にnullです。

これが機能しない理由はありますか?

逆はうまくいきます、例えば

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 に答える