如何在UserType nullSafeGet中获取对象的类型

时间:2012-04-10 04:49:02

标签: java hibernate

我正在编写以下自定义可序列化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并将对象的类作为属性传递。 :(

1 个答案:

答案 0 :(得分:1)

不幸的是,我认为唯一的解决方案是使用ParameterizedType,然后每次要将其与不同的类一起使用时创建一个类型定义。

如果您需要示例,请参阅此问题中的代码: Hibernate Entities from Multiple Databases