2012-02-02 8 views
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エンティティがないという結果です。私は何が欠けていますか?

+0

ロギングを有効にすると、どのようなSQLが生成されますか?それが正しいか?データはデータベース上にありますか? – James

+0

はいデータがデータベースにあり、SQLが正しく生成されています – TGM

答えて

0

データベース内のどの列でJPAが結合操作を実行するかを定義する必要はありません。

関連する問題