【问题标题】:org.hibernate.MappingException:No Dialect mapping for JDBC type: 1111org.hibernate.MappingException:没有 JDBC 类型的方言映射:1111
【发布时间】:2011-07-19 06:19:24
【问题描述】:

我正在使用具有 XML 列类型的 postgres v8.3。 DDL 看起来像这样:

CREATE TABLE contact (
"ID" INTEGER NOT NULL , 
"NAME" VARCHAR NOT NULL,
"Details" XML , ......

在映射 hbm.xml 文件中,我将其映射如下:

<key-property name="Details" type="java.lang.String" >
<column name="Details" />
</key-property>

我猜这是错误的原因: 没有 JDBC 类型的方言映射:1111 当我使用:

运行选择查询时
List<?> contactList= session.createSQLQuery("select * from contact where id=" + val.getId() + " and name= '" + val.getName + "'").list();

但是我可以将“XML”类型映射到 java 数据类型的另一种方法是什么?

【问题讨论】:

  • nIKUNJ 的回答是正确的,它为我解决了这个问题。我在从 spring 2.x 升级到 spring 3 时遇到了这个问题。不知道为什么字符串到 xml 列的不匹配映射以前起作用,但是升级肯定开始导致这些:org.hibernate.exception.SQLGrammarException:无法执行JDBC批量更新

标签: java hibernate


【解决方案1】:

您必须使用 hibernate 提供的 org.hibernate.usertype.UserType 类指定您的自定义列类型。

Here 就是很好的例子。

谢谢。

【讨论】:

  • 在那个例子中,Hibernate 是如何知道创建一个 XML 列的? sqlTypes() 方法返回 { Types.VARCHAR }
【解决方案2】:

Use addScalar();

例如

session.createSQLQuery("select public.flcpool_backup()")
                                     .addScalar("id", Hibernate.BIG_INTEGER)
                                     .addScalar("caf_tbl_id", Hibernate.BIG_INTEGER)
                                     .executeUpdate();  

【讨论】:

    【解决方案3】:

    尝试在 hibernate.cfg.xml 中为 postgres 定义连接方言“hibernate.dialect”。

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 2018-12-04
      • 2012-02-09
      • 2012-06-17
      • 2018-04-08
      • 2014-12-17
      相关资源
      最近更新 更多