gpt4 book ai didi

java - JPA 条件 - 使用 where 子句获取

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:45 25 4
gpt4 key购买 nike

我有以下查询工作正常:

public ContractorContractor findContractorByName(String contractorName) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<ContractorContractor> query = builder.createQuery(ContractorContractor.class);
Root<ContractorContractor> root = query.from(ContractorContractor.class);
query.select(root).distinct(true);

Predicate namePredicate = builder.like(root.get(ContractorContractor_.name), contractorName);
query.where(builder.and(namePredicate));

return em.createQuery(query).getSingleResult();
}

以上查询按名称给出了单一承包商或抛出异常。现在我想做同样的事情但是获得更多关于承包商的信息(将提取添加到承包商的另一个 child )但是通过以下查询我没有得到结果(org.springframework.dao.EmptyResultDataAccessException:没有找到查询的结果被抛出) .使用 fetch 查询:

public ContractorContractor findContractorByName(String contractorName) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<ContractorContractor> query = builder.createQuery(ContractorContractor.class);
Root<ContractorContractor> root = query.from(ContractorContractor.class);
root.fetch(ContractorContractor_.countries);
query.select(root).distinct(true);

Predicate namePredicate = builder.like(root.get(ContractorContractor_.name), contractorName);
query.where(builder.and(namePredicate));

return em.createQuery(query).getSingleResult();
}

谁能告诉我我在上面的查询中做错了什么以及为什么?

最佳答案

看来您通过添加内部提取连接并添加以下语句不小心限制了查询的域:

root.fetch(ContractorContractor_.countries);

根据 JPA 2.1,JSR 338,第 6.5.4 节

[...] A fetch join has the same join semantics as the corresponding inner or outer join [...]

因此,将隐式内部获取连接 (JoinType.INNER) 更改为(外部)左获取连接 应该可以解决您的问题:

root.fetch(ContractorContractor_.countries, JoinType.LEFT);

这种副作用可能看起来有点出乎意料,这可能就是规范作者添加以下注释的原因(尽管在标准连接的上下文中,第 4.4.7 节):

Application developers should use caution in defining identification variables because the domain of the query can depend on whether there are any values of the declared type.

关于java - JPA 条件 - 使用 where 子句获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747433/

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