gpt4 book ai didi

java - Hibernate getResultList() 返回计数查询的重复项

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

我正在使用 Java 1.6 和 Hibernate 版本 3.2.1 运行计数查询,我希望返回包含 [2] 的结果列表。我得到的结果列表包含 [2, 2, 2, 2]。我打开调试以查看 hibernate 查询,这让我可以看到同一查询被运行了四次。

我正在运行 getResultList() 的查询上的 ejbql:

SELECT COUNT(*)FROM FlightLogItemEntity AS sectorItem  WHERE UPPER(sectorItem.sectorId) = :literal0 AND UPPER(sectorItem.logType) = :literal1

{literal0=0001006711, literal1=TL}

仅运行一次 getResultList() 后,我在日志中看到正在运行四个相同的查询:

[SQL] select count(*) as col_0_0_ from SECTOR_ITEM techlogite0_ where upper(techlogite0_.SECTOR_ID)=? and upper(techlogite0_.LOG_TYPE)=? 
[StringType] binding '0001006711' to parameter: 1
[StringType] binding 'TL' to parameter: 2
[LongType] returning '2' as column: col_0_0_
[SQL] select count(*) as col_0_0_ from SECTOR_ITEM flightlogi0_ where upper(flightlogi0_.SECTOR_ID)=? and upper(flightlogi0_.LOG_TYPE)=?
[StringType] binding '0001006711' to parameter: 1
[StringType] binding 'TL' to parameter: 2
[LongType] returning '2' as column: col_0_0_
[SQL] select count(*) as col_0_0_ from SECTOR_ITEM flightlogi0_ where upper(flightlogi0_.SECTOR_ID)=? and upper(flightlogi0_.LOG_TYPE)=?
[StringType] binding '0001006711' to parameter: 1
[StringType] binding 'TL' to parameter: 2
[LongType] returning '2' as column: col_0_0_
[SQL] select count(*) as col_0_0_ from SECTOR_ITEM cabinlogit0_ where upper(cabinlogit0_.SECTOR_ID)=? and upper(cabinlogit0_.LOG_TYPE)=?
[StringType] binding '0001006711' to parameter: 1
[StringType] binding 'TL' to parameter: 2
[LongType] returning '2' as column: col_0_0_

起初我认为这可能与导致多个查询运行的实体关系有关,但在删除所有关系后我仍然看到正在运行相同的重复查询。

生成查询的代码(在设置 entityManager、ejbql 和 Literals 之后):

query.setFirstResult(-1);
query.setFlushMode(null);
query.setMaxResults(-1);
List<?> resultList = query.getResultList();

有谁知道我可以如何防止运行重复查询(以防止重复结果)?

最佳答案

我不确定为什么它执行 4 次查询,但是当您使用 query.setMaxResults(-1); 时,您将其设置为返回它获得的许多项目。 http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/Query.html#setMaxResults(int)

尝试将 query.setMaxResults(-1); 更改为 query.setMaxResults(1); 这可能只是一个创可贴,但它应该让你得到一个结果。

关于java - Hibernate getResultList() 返回计数查询的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730243/

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