我有一个包含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是否有办法动态获取这些值?
答案 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查询一起使用。