簡體   English   中英

JPA:選擇查詢同時獲取父級和子級

[英]JPA: Select query fetch both parent and child

我將JPA與Eclipse Link實現結合使用。

我在UserAccount和UserDetail之間具有以下關系:

用戶帳號:

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

用戶詳細信息:

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

我正在嘗試從數據庫中獲取一個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實體。 我想念什么?

您尚未定義數據庫JPA應該以其自己為基礎來執行聯接操作的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM