gpt4 book ai didi

java - jpql left join fetch 不返回类似的结果

转载 作者:行者123 更新时间:2023-11-29 00:07:41 25 4
gpt4 key购买 nike

在使用 hibernate 和 MySQL 的 spring mvc 应用程序中,我编写了以下查询方法来返回包含患者的姓名列表:

@SuppressWarnings("unchecked")
public Collection<Person> findPersonByLastName(String ln) throws DataAccessException{
Query query = this.em.createQuery("SELECT DISTINCT pers FROM rimPerson pers left join fetch pers.names nm WHERE nm.family LIKE :lnm");
query.setParameter("lnm", ln);
return query.getResultList();
}

这将生成以下 hibernate sql:

Hibernate: 
select distinct
person0_.hppid as hppid1_340_0_,
names1_.HJID as HJID1_89_1_,
person0_2_.classCode_HJID as classCod2_339_0_,
person0_1_.administrativeGenderCode_HJID as administ2_341_0_,
person0_1_.birthTime_HJID as birthTim3_341_0_,
names1_.DELIMITER_ as DELIMITE2_89_1_,
names1_.FAMILY as FAMILY3_89_1_,
names1_.named_entity_hppid as named5_89_1_,
names1_.SUFFIX as SUFFIX4_89_1_,
names1_.name_entity_HJID as name9_340_0__,
names1_.HJID as HJID1_89_0__
from
rim_person person0_ inner join rim_living_subject person0_1_ on person0_.hppid=person0_1_.hppid
inner join rim_entity person0_2_ on person0_.hppid=person0_2_.hppid
inner join rim_infrastructure_root person0_3_ on person0_.hppid=person0_3_.hppid
left outer join EN names1_ on person0_.hppid=names1_.name_entity_HJID
where names1_.FAMILY like ?

当我使用以下命令调用上述 jpql 方法时,它返回零结果:

this.myappService.findPersonByLastName("");  

当我将上面生成的 hibernate 代码剪切并传递到 MySQL 命令行客户端并将 ? 替换为 '' 时,我也得到了零结果。

但是,如果我从上面的 hibernate 生成的 sql 中删除 where names1_.FAMILY like ? 并将缩短的 sql 放入 MySQL 命令行客户端,我会得到四个结果,每个结果都有一个姓氏字段的值。

当 `` 作为空字符串参数传递时,我如何更改 jpql 以便它生成一个返回四个结果的 hibernate 查询? 我希望结果集包含每个结果用户提供空输入,但在用户输入任何给定文本输入时提供过滤结果。

最佳答案

like 未能完成您认为它应该做的事情的典型原因是忘记在模式字符串中放置通配符。例如,如果您想要匹配所有以“Code”开头的用户名,您必须执行类似name like 'Code%' 的操作,而不是name like 'Code'。您可以通过在字符串中仔细放置 %s 来精确控制谓词匹配的内容。

试试看所有实体,不管 family 中的值是什么:

this.myappService.findPersonByLastName("%");

findPersionByLastName 的调用者必须放入 % 通配符有点俗气。更好的实现是让调用者指定他们要查找的姓​​氏,然后让构造查询的代码将通配符放在正确的位置。当您查找姓氏时,您可能会这样做:

query.setParameter("lnm", "%" + ln);

这将匹配任何以传递给方法的参数结尾的内容。

关于java - jpql left join fetch 不返回类似的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745082/

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