jpa查询blob数据抛出异常:No Dialect mapping for JDBC type -4

本文介绍了解决使用entityManager创建原生SQL查询BLOB数据时出现的MappingException异常的方法。通过自定义BlobMySQLDialect类并注册BLOB类型,再在persistence.xml中配置自定义的方言类来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用entityManager.createNativeQuery(sql).list()查询blob数据时,抛出了下面的异常:

Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: -4
at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
at org.hibernate.dialect.TypeNames.get(TypeNames.java:81)
at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:370)

其中entityManager为javax.persistence.EntityManager类型,此时,需要注册BLOB类型,编写一个继承MySQL5Dialect的类:

package com.kin.mail.dialect; import java.sql.Types; import org.hibernate.Hibernate; import org.hibernate.dialect.MySQL5Dialect; /** * 注册BLOB类型 * @author kin * */ public class BlobMySQLDialect extends MySQL5Dialect { public BlobMySQLDialect () { super(); registerHibernateType(Types.LONGVARBINARY, Hibernate.BLOB.getName());//注册blob,Types.LONGVARBINARY的值就是-4 } }

然后在persistence.xml配置文件里修改数据库方言声明:

<property name="hibernate.dialect" value="com.kin.mail.dialect.BlobMySQLDialect" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值