gpt4 book ai didi

java - JPA:选择查询获取父级和子级

转载 作者:行者123 更新时间:2023-12-01 05:30:09 25 4
gpt4 key购买 nike

我正在使用 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 应基于数据库中的哪一列来执行联接操作。

关于java - JPA:选择查询获取父级和子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9109501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com