今天写了一个SQL查询语句, 执行createSQLQuery时老报错,后来根据错误描述才发现原来是因为查询字段中有image类型。
解决办法:
第一步:
package com.my.hibernate.config;
import java.sql.Types;
import org.hibernate.dialect.MySQL5Dialect;
/**
*
*/
public class DialectForInkfish extends MySQL5Dialect {
public DialectForInkfish() {
super();
registerHibernateType(Types.LONGVARCHAR, 65535, "text"); //text
registerHibernateType(Types.LONGVARBINARY,image); //image
}
}
第二步:
将hibernate配置文件中
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
改为
<property name="dialect">com.my.hibernate.config.DialectForInkfish</property>
与外单位交换数据,商议好传XML格式。由于数据中有Image 大字段类型的字段,因此计划将Image内容Base64编码为String,传过去再解码存入数据库。
Base64编码解码:
// 将 s 进行 BASE64 编码
public static String getBASE64(String s) {
if (s == null) return null;
return (new sun.misc.BASE64Encoder()).encode( s.getBytes() );
}
// 将 BASE64 编码的字符串 s 进行解码
public static String getFromBASE64(String s) {
if (s == null) return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
return null;
}
}