我有个问题。用户程序中可以编写我程序中的某些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。请参阅文档以了解用法

10-04 10:02