2012-04-10 4 views
1

Я пишу следующий заказ сериализуемой 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 и передача класса объекта в качестве свойства. :(

ответ

1

К сожалению, я считаю, что единственным решением является использование ParameterizedType, а затем создать определение типа каждый раз, когда вы хотите использовать его с другим классом.

Если вам нужен пример, код, приведенный в этот вопрос: Hibernate Entities from Multiple Databases

Смежные вопросы