【问题标题】:Include column names in Grails SQL query results在 Grails SQL 查询结果中包含列名
【发布时间】:2013-09-16 23:34:49
【问题描述】:

我有一个看起来像这样的查询...

        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 查询中包含/添加列名的方法。我显然可以将结果转换为地图并自己对列名进行硬编码。

【问题讨论】:

  • 当您在选择查询中使用as 时,您不能访问它吗?例如:data.each{println it.get('media_id')}it['media_id'] 等等。
  • 我的意思是一种将结果转储到带有“标题”行的数组的方法。我必须写很多这样的查询,并且必须手动插入每列的名称很慢。

标签: sql hibernate grails grails-orm


【解决方案1】:

使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多