我有个问题。用户程序中可以编写我程序中的某些sql。因此,我不知道该sql中的表或列。因此,我想检测哪些列名称在sql中。但是,如果日期在sql中,我会得到JDBC类型的No Dialect映射:-102错误。
我该如何处理?我正在使用Java的休眠3.6或4.1.3。我的数据库是一个oracle数据库。该方言是org.hibernate.dialect.Oracle10gDialect。
我真的不知道sql中有什么。
这是我的代码:
SQLQuery q=session.createSQLQuery("SELECT * FROM tbl WHERE id = 2");
q.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String,Object>> aliasToValueMapList=q.list();
for(Map<String,Object> map : aliasToValueMapList){
System.out.println(map.keySet());
break;
}
我希望任何人都知道该问题的解决方案。
格蕾兹
最佳答案
您的查询正在尝试返回JDBC ResultSetMetaData正在报告Hibernate不知道如何读取的类型(-102)的列。您需要使用org.hibernate.SQLQuery#addScalar在查询中注册该列的类型,否则您可能无法使用该转换器,并实际上定义了映射到您的实体org.hibernate.SQLQuery#addRoot / org的整个结果集.hibernate.SQLQuery#addEntity。请参阅文档以了解用法