Hibernate本机sql查询

时间:2014-05-26 13:07:23

标签: sql hibernate native

非常精细的ms-sql语句

SELECT distinct ProductLineCode ,
(SELECT CAST(ItemName + ', ' AS VARCHAR(MAX)) FROM Product spt 
where spt.ProductLineCode = pt.ProductLineCode FOR XML PATH ('')) 
as ItemNames FROM Product pt where ProductLineCode is not null

在hibernate中作为本机查询执行时会导致错误。

org.hibernate.MappingException:没有JDBC类型的Dialect映射:-16

我猜JDBC类型:-16是布尔值,但我什么也没说。产品表具有xml映射,并且可以使用数月。 你能指导下一步尝试一下吗?

1 个答案:

答案 0 :(得分:0)

您可能会在评论中建议通过更改sql中的类型来获得类似的工作。

但是,如果这不会带来成功,您也可以通过更改应用程序使用的Dialect类来告诉hibernate如何处理此类型,甚至可能扩展当前使用的类并添加注册缺失类型。

您的遗漏类型映射似乎是java.sql.Types.LONGNVARCHAR类型(通过代码grep,值为-16),因此Dialect扩展名的调用类似于

registerColumnType( Types.LONGNVARCHAR, "text" );
构造函数中的

可能会说服hibernate将此字段视为文本。

如果您这样做,则必须通过修改行

来更改配置以使用您的方言
<property name="dialect">org.hibernate.dialect.SQLServer2012Dialect</property>

使用你自己的方言课。 (注意:那里的课程只是猜测你现在可能有什么。)

你的数据库也可能使用错误的方言进行休眠,在这种情况下,只需将配置更改为适当的方言就会更好。

很少需要使用自定义Dialect,但这可能是其中之一。