我正在编写以下自定义可序列化UserType:
public class SerUserType extends MutableUserType {
protected Class klass;
protected SerA ser=F.g(SerA.class);
public Class returnedClass() {
return klass;
}
public int[] sqlTypes() {
return new int[] {Types.BLOB};
}
public boolean equals(Object x, Object y) throws HibernateException {
return ObjectUtils.equals(x, y);
}
public Object deepCopy(Object value) {
klass=value.getClass();
Copyable copyable=(Copyable)value;
Object copy=copyable.copy();
return copy;
}
public Object nullSafeGet(ResultSet resultSet,String[] names,SessionImplementor session,Object owner)
throws HibernateException,SQLException {
byte[] b=(byte[])BlobType.INSTANCE.nullSafeGet(resultSet,names,session,owner);
return ser.deser(b,klass);
}
public void nullSafeSet(PreparedStatement preparedStatement,Object value,int index,SessionImplementor session)
throws HibernateException,SQLException {
BlobType.INSTANCE.nullSafeSet(preparedStatement,ser.ser(value),index,session);
}
}
我甚至可以用它覆盖已注册的可连续课程。如果您感兴趣,SerA的实现是protostuff序列化器。
无论如何,似乎没有在nullSafeGet之前调用提供此接口中的对象的任何方法,因此无法确定我们正在使用的对象的类,从而无法获取该类的类序列化调用。
因此,似乎唯一的解决方案是创建一个ParameterizedType并将对象的类作为属性传递。 :(
答案 0 :(得分:1)
不幸的是,我认为唯一的解决方案是使用ParameterizedType,然后每次要将其与不同的类一起使用时创建一个类型定义。
如果您需要示例,请参阅此问题中的代码: Hibernate Entities from Multiple Databases