如何遍历由createSQLquery 进行联合查询得到的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何遍历由createSQLquery 进行联合查询得到的结果相关的知识,希望对你有一定的参考价值。

createSQLquery联合查询后得到元素为Object类型的List.里面的字段是多个表的字段,怎么遍历!

比较麻烦,
方法一:
将几个实体类合并成一个实体类,此种方法较笨,不过是最容易理解的(不过不提倡这样写)。
比如,三表连查将对应的三个实体类合并成一个新类。
方法二:
使用hashtable,和一个Array.
比如三表连查,取出一个能够唯一标识此条连表查询记录的字段作为hashtable的键,然后将所取字段一一装入三个实体类中,然后再将这三个实例装入Array中,再把此Array的实例作为值放到hashtable中去,如此就建立了映射关系。遍历hashtable的键取出值Array后,再遍历Array,其实不是遍历Array,通过索引找到就行了,毕竟表的数量(Array长度为3,因为查了三张表)和索引(固定逻辑顺序存放三个实体类的实例)位置都是已知的。
再下来的事情应该不用说了吧?
参考技术A 需要遍历每条查询结果来进行某些操作,例如拆分查询结果的字符串就要通过循环来进行,以下给出了一种循环遍历的例子供大家参考。

假设表TblTest有两个字段:id, value, 而value的值在查到后需要拆分,如:'aa,bb,cc',就可利用以下循环来进行(拆分的例子可以参考另一篇文章:Sql Server中如何拆分字符串)。

/* tmp table that store the flag to indicate if this record is processed */
declare @TblTest_tmp table(
id decimal(18,0),
[flag] int
)

/* total count for the query result */
declare @totalcount int
declare @rownum int

select @totalcount = count(1) from TblTest

set @rownum = 1

while @rownum <= @totalcount
begin
declare @id decimal(18,0),
@value varchar(2000)

select top 1 @id=[id], @value=[value] from TblTest where flag=0

/* do sth for @value, e.g. select * from split(@value, ',') */

update @TblTest_tmp set flag = 1 where [id] = @id
set @rownum = @rownum + 1
end

以上是关于如何遍历由createSQLquery 进行联合查询得到的结果的主要内容,如果未能解决你的问题,请参考以下文章

createQuery与createSQLQuery区别

如何在休眠中使用 CreateSqlQuery 查询不同的数据库?

如何在 DataGridView 中显示 nHibernate CreateSQLQuery 的结果?

sqlserver:如何截取字符串后联合查询出数据

hibernate 中createQuery与createSQLQuery的用法

hibernate里createSQLQuery