sql - Hibernate原生sql查询

标签 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 中作为 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/

相关文章:

创建或更新行时出现 java.sql.SQLException

java - 使用 Spring Data 通过实体 ID 从实体获取嵌入式对象

android - PhoneGap - 调用另一个应用程序(AngryBirds)

android - Fabric-Mopub/Android 单一原生广告 Activity

php - 为什么我的日期没有显示在此图表上(drupal、php、mysql)?

sql - 如何在 postgres 中使用 'for statement' 触发器?

sql - 如何在sql server中选择没有名称的列?

sql - Oracle - 删除表约束而不删除表

java - 请给我 Spring、Hibernate 的真实世界项目

java - android构建系统如何处理加载 native 共享库的java库