【问题标题】:Get dynamic SQL column names from Hibernate从 Hibernate 获取动态 SQL 列名
【发布时间】:2014-09-27 07:52:36
【问题描述】:

我有一个包含 CLOB 的 Oracle 表。在这个 CLOB 内部可以是一条 SQL 语句。这可以随时更改。

我目前正在尝试动态运行这些 SQL 语句并返回列名和数据。这是用于在网页上动态创建表格。

使用 Hibernate,我创建查询并获取数据,如下所示:

List<Object[]> queryResults = null;
SQLQuery q = session.createSQLQuery(sqlText);
queryResults = q.list();

这会得到我需要的数据,但不是列名。我曾尝试使用getReturnAliases() 方法,但它会引发“java.lang.UnsupportedOperationException:SQL 查询当前不支持返回别名”的错误

所以我的问题是:有没有办法通过 Hibernate 动态获取这些值?

【问题讨论】:

标签: java sql hibernate


【解决方案1】:

你可以使用:

q.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String,Object>> aliasToValueMapList=query.list();

在 createSQLQuery 中获取列名。

更多详情请参考this问题。

【讨论】:

    【解决方案2】:

    您可以使用 addScalar 方法来定义列。

    看看 16.1.1 https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/querysql.html

    【讨论】:

      【解决方案3】:

      您可以实现 ResultTransformer (http://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/transform/ResultTransformer.html) 并将其设置在本机查询中。我认为使用本机 SQL 查询,您可以获得 SQL 中指定的别名作为回调方法中的别名参数。

      【讨论】:

        【解决方案4】:

        在 2018 年,我建议将 NativeQueryTupleTransformer 与本机查询一起使用。

        query.setResultTransformer(new NativeQueryTupleTransformer());
        

        结果格式为List&lt;Tuple&gt;。这种格式非常便于处理原生 SQL 查询。

        【讨论】:

          猜你喜欢
          • 2015-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-01
          • 1970-01-01
          • 2014-07-02
          • 2012-02-15
          • 1970-01-01
          相关资源
          最近更新 更多