hibernate连接kingbase数据库报错,不能反序列化,主要原因是(org.hibernate.type.descriptor.sql.BlobTypeDescriptor)转换失败

报错如下(提示的很明显是数据库字段类型为Clob识别失败):

at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)
 at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:138)
 at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:120)
 at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:27)
 at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$1.doExtract(BlobTypeDescriptor.java:48)
 at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
 at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:235)
 at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:231)
 at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:222)
 at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:296)
 at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2762)
 at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.loadFromResultSet(EntityReferenceInitializerImpl.java:307)
 at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:235)
 at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:103)

解决:最后重写了kingbase8的方言

package com.hqdps.spring;

import org.hibernate.dialect.Kingbase8Dialect;
import org.hibernate.type.descriptor.sql.ClobTypeDescriptor;
import org.hibernate.type.descriptor.sql.LongVarbinaryTypeDescriptor;
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;

public class TjhqKingbase8Dialect extends Kingbase8Dialect {
	
	@Override
	public SqlTypeDescriptor getSqlTypeDescriptorOverride(int sqlCode)
	  {
	    SqlTypeDescriptor descriptor;
	    switch (sqlCode)
	    {
	    case 2004:
	    //descriptor = BlobTypeDescriptor.BLOB_BINDING;
	      descriptor =  LongVarbinaryTypeDescriptor.INSTANCE;
	
	      break;
	    case 2005:
	    //descriptor = ClobTypeDescriptor.STREAM_BINDING;
	      descriptor = ClobTypeDescriptor.CLOB_BINDING;
	
	      break;
	    default:
	      descriptor = super.getSqlTypeDescriptorOverride(sqlCode);
	    }
	    return descriptor;
	    
	  }
}

方言配置:

jdbc.url=jdbc:kingbase8://10.10.17.78:54321/tea
jdbc.username=tea
jdbc.password=tea
jdbc.schema=public
jdbc.driver=com.kingbase8.Driver
jdbc.validationQuery=select 'test' from dual
jdbc.dialect=com.hqdps.spring.TjhqKingbase8Dialect

另外kingbase新建用户和数据库:(system/1 登录)

create database npc;
create user npc_2 with password '123';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值