报错如下(提示的很明显是数据库字段类型为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';