我有一个看起来像这样的查询...
def data = session.createSQLQuery("""SELECT
a.id AS media_id,
a.uuid,
a.date_created,
a.last_updated,
a.device_date_time,
a.ex_time,
a.ex_source,
a.sequence,
a.time_zone,
a.time_zone_offset,
a.media_type,
a.size_in_bytes,
a.orientation,
a.width,
a.height,
a.duration,
b.id AS app_user_record_id,
b.app_user_identifier,
b.application_id,
b.date_created AS app_user_record_date_created,
b.last_updated AS app_user_record_last_updated,
b.instance_id,
b.user_uuid
FROM media a, app_user_record b
WHERE a.uuid = b.user_uuid
LIMIT :firstResult, :maxResults """)
.setInteger("firstResult", cmd.firstResult)
.setInteger("maxResults", cmd.maxResults)
.list()
问题是.list方法返回的数组没有列名。有谁知道一种从Grails本机sql查询中包含/添加列名的方法。很明显,我可以将结果转换成 map ,并用硬编码自己命名列。
最佳答案
使用setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
进行查询。这将产生一个条目映射。
import org.hibernate.Criteria
def query = """Your query"""
def data = session.createSQLQuery(query)
.setInteger("firstResult", cmd.firstResult)
.setInteger("maxResults", cmd.maxResults)
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
.list()
data.each{println it.UUID}
我对其进行了测试,并意识到以前我曾经使用列号来获取每个字段,而不是列名。
注意
键是大写的。因此
ex_source
在结果图中将是EX_SOURCE
。