首页 > 解决方案 > Hibernate 返回最后一行 n 次

问题描述

我正在使用休眠核心 5.4.33.Final 和 mysql-connector 8.0.22。DB MySql org.hibernate.dialect.MySQLDialect。我的问题也出现在以前的版本上。

在单个表上运行一个简单的 SQL 查询,没有连接,只返回最后一条记录 n 次,其中 n 是正确的记录数。

HQL查询

SELECT ig.id, ig.codice 
FROM ImpiantiGestitiDto as ig 

架构:

id=integer autoincrement
idPalestra=integer 
codice=varchar(6) 
numero=char(3)
codice_descrizione_impianto=varchar(6)

ImpiantiGestitiDto=Dto

这是我的代码。我不使用循环。

Query<Object> query = session.createQuery(hql);
result = query.getResultList(); 

mysql-connector 成功运行查询:

StandardRowReader - ---Processing Row---
Extracted JDBC value [0] - [1]
Extracted JDBC value [1] - [000.00]
StandardRowReader - ---Processing Row---
Extracted JDBC value [0] - [2]
Extracted JDBC value [1] - [000.01]
StandardRowReader - ---Processing Row---
Extracted JDBC value [0] - [3]
Extracted JDBC value [1] - [000.02]
StandardRowReader - ---Processing Row---
Extracted JDBC value [0] - [4]
Extracted JDBC value [1] - [000.03]

getResultList() 上的输出;错误的!

[[4,"000.03"],[4,"000.03"],[4,"000.03"],[4,"000.03"]]

我认为问题出现在:-org.hibernate.sql.results.spi 包;- 类 ListResultsConsumer;-方法消耗。

在接下来的循环中, results.add(row) ;指示发生错误。为什么会出现问题?你能帮助我吗?谢谢!

while (rowProcessingState.next()) {     
    final R row = rowReader.readRow( rowProcessingState, processingOptions );    
    boolean add = true;     
    if ( uniqueRows ) {         
       if ( results.contains( row ) ) { 
        add = false;        
       }
    }   
    if ( add ) {        
       results.add( row );  
    }   
    rowProcessingState.finishRowProcessing(); 
}

使用查询

FROM ImpiantiGestitiDto order by id

其作品。

使用查询

SELECT id, codice FROM ImpiantiGestitiDto order by id

不起作用。

我必须使用第二个查询,因为表 ImpiantiGestitiDto 已连接到另一个表,我必须使用 WHERE 子句。

感谢您的回答。

标签: mysqlhibernate

解决方案


推荐阅读