Я пишу следующий заказ сериализуемой UserType:Как получить тип объекта в UserType nullSafeGet
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);
}
}
Я мог бы даже отменить регистрацию serialable класса с ним. Если вам интересно, реализация SerA - это прототип сериализатора.
В любом случае, не представляется возможным, чтобы какой-либо из методов, предоставляющих объект в этом интерфейсе, вызывался до nullSafeGet, поэтому невозможно определить класс объекта, с которым мы работаем, что делает невозможным получение класса для вызова сериализации.
Поэтому представляется, что единственным решением является создание параметра ParameterizedType и передача класса объекта в качестве свойства. :(