2012-02-02 42 views
1

我正在使用JPA和Eclipse Link实现。JPA:选择查询获取父级和子级

我有UserAccount和UserDetail之间存在以下关系:

用户帐号:

@OneToOne(fetch=FetchType.EAGER) 
@PrimaryKeyJoinColumn 
private UserDetail userDetail; 

用户详细信息:

@OneToOne(mappedBy="userDetail") 
private UserAccount userAccount; 

我试图获取一个UserAccount从DB:

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搜索用户。问题是在结果UserAccount没有一个UserDetail实体,即使我使用了(fetch=FetchType.EAGER)。我错过了什么?

+0

启用日志记录,生成什么SQL?这是对的吗?数据库中的数据是? – James 2012-02-02 14:03:20

+0

是的数据是在数据库中,并且生成的SQL是正确的 – TGM 2012-02-03 21:17:52

回答

0

您尚未定义数据库中哪个列应该基于JPA执行联接操作。