完美的 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 中作为 native 查询执行时导致错误。
org.hibernate.MappingException:没有 JDBC 类型的方言映射:-16
我猜 JDBC type: -16 是 bool 值,但这对我来说没什么意义。产品表具有 xml 映射并且可以正常运行数月。 您能指导我接下来要尝试什么吗?
最佳答案
您可能会按照评论中的建议通过更改 sql 中的类型来获得类似的效果。
但是如果这没有带来成功,您也可以通过更改应用程序使用的 Dialect
类来告诉 hibernate 如何处理这种类型,甚至可能扩展当前使用的类并为缺少的类型添加注册。
看来您缺少的类型映射是针对 java.sql.Types.LONGNVARCHAR
类型的(通过代码 grep,值为 -16),因此是 Dialect
带有类似调用的扩展
registerColumnType( Types.LONGNVARCHAR, "text" );
在构造函数中可以说服 hibernate 将此字段视为文本。
如果您这样做,您必须通过修改行来更改配置以使用您的方言
<property name="dialect">org.hibernate.dialect.SQLServer2012Dialect</property>
使用您自己的方言类。 (注意:其中的类只是对您现在可能拥有的内容的猜测。)
也有可能您的 hibernate 使用了错误的数据库方言,在这种情况下,只需将配置更改为适当的配置会更好。
很少需要使用自定义方言
,但这可能是其中之一。
关于sql - Hibernate原生sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23870887/