1

我有个问题。我的程序中的一些 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;
}

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

格雷茨

4

2 回答 2

3

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

于 2012-06-16T00:54:31.540 回答
1

如果您使用 session.createQuery() 这将使用您的方言使用 Hibernate 查询语言与数据库对话。但是如果你使用 createSQLQuery() 你必须使用 PL/SQL 来与 oracle 对话。

于 2012-06-15T16:53:16.510 回答