从Hibernate获取动态SQL列名

时间:2014-08-04 18:46:45

标签: java sql hibernate

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

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

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

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

这会获取我需要的数据,但不会获取列名。我已尝试使用getReturnAliases()方法,但它会抛出一个错误,即&#34; java.lang.UnsupportedOperationException:SQL查询当前不支持返回别名&#34;

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

4 个答案:

答案 0 :(得分:12)

您可以使用:

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

获取createSQLQuery中的列名。

有关详细信息,请参阅this问题。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

在2018年,我建议对本机查询使用NativeQueryTupleTransformer。

query.setResultTransformer(new NativeQueryTupleTransformer());

结果格式为List<Tuple>。这种格式非常适合与本机SQL查询一起使用。