JDBC类型的无Dialect映射:-102

时间:2012-06-15 16:39:28

标签: java sql oracle hibernate

我有一个问题。我的程序中的一些sql可以由用户编写。所以我不知道这个sql中的哪个表或哪些列。因此,我想检测sql中的列名。但是如果日期在sql中我得到JDBC类型的No Dialect映射:-102错误。 我该怎么处理?我正在使用hibernate 3.6或4.1.3与java。我的数据库是一个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;
}

我希望有人知道这个问题的解决方案。

格尔茨

2 个答案:

答案 0 :(得分:3)

您的查询尝试返回JDBC ResultSetMetaData报告的类型(-102)的列,Hibernate不知道该如何读取。您需要使用org.hibernate.SQLQuery #addScalar在查询中注册该列的类型,否则您可能无法使用该转换器并实际定义映射到您的实体的整个结果集org.hibernate.SQLQuery #addRoot / org .hibernate.SQLQuery#addEntity。请参阅文档以了解用法

答案 1 :(得分:1)

如果使用session.createQuery(),这将使用您的方言使用Hibernate查询语言与数据库通信。但如果你使用createSQLQuery(),你必须使用PL / SQL与oracle交谈。