1
Eclipseリンク実装でJPAを使用しています。JPA:照会選択で親と子の両方を選択します
I持ってUserAccountのとUserDetailの間に次の関係:
ユーザーアカウント:
@OneToOne(fetch=FetchType.EAGER)
@PrimaryKeyJoinColumn
private UserDetail userDetail;
ユーザー詳細:
@OneToOne(mappedBy="userDetail")
private UserAccount userAccount;
私は1つを取得しようとしていますDBからのUserAccount:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<UserAccount> shell = builder.createQuery(UserAccount.class);
Root<UserAccount> entity = shell.from(UserAccount.class);
shell.select(entity);
shell.distinct(true);
List<Predicate> predicateList = new ArrayList<Predicate>();
if (id != null){
ParameterExpression<Integer> param = builder.parameter(Integer.class, "id");
predicateList.add(builder.equal(entity.get("id"), param));
}
if (predicateList.size() == 1){
shell.where(predicateList.get(0));
} else {
Predicate[] p = new Predicate[predicateList.size()];
p = predicateList.toArray(p);
shell.where(builder.and(p));
}
TypedQuery<UserAccount> selectQuery = em.createQuery(shell);
if (id != null) selectQuery.setParameter("id", id);
return selectQuery.getResultList();
このクエリはIDでユーザーを検索します。問題は、私が(fetch=FetchType.EAGER)
を使用したにもかかわらず、UserAccountにUserDetailエンティティがないという結果です。私は何が欠けていますか?
ロギングを有効にすると、どのようなSQLが生成されますか?それが正しいか?データはデータベース上にありますか? – James
はいデータがデータベースにあり、SQLが正しく生成されています – TGM