要传递给UserType,BlobType.setPreparedStatement会话参数的内容

时间:2012-04-09 22:53:05

标签: java hibernate

http://blog.xebia.com/2009/11/09/understanding-and-writing-hibernate-user-types/

我正在尝试定义一个模仿的客户序列化UserType,这里引用并提供了XStreamUserType:

http://code.google.com/p/aphillips/source/browse/commons-hibernate-usertype/trunk/src/main/java/com/qrmedia/commons/persistence/hibernate/usertype/XStreamableUserType.java

我的序列化程序输出一个可能写入Blob的bytearray。我打算这样做:

public class CustomSerUserType extends DirtyCheckableUserType {
    protected SerA ser=F.g(SerA.class);
    public Class<Object> returnedClass() {
        return Object.class;
    }
    public int[] sqlTypes() {
        return new int[] {Types.BLOB};
    }
    public Object nullSafeGet(ResultSet resultSet,String[] names,Object owner) 
        throws HibernateException,SQLException {
        if()
    }
    public void nullSafeSet(PreparedStatement preparedStatement,Object value,int index) 
        throws HibernateException,SQLException {
        BlobType.nullSafeSet(preparedStatement,ser.ser(value),index);
    }
}

不幸的是,BlobType.nullSafeSet方法需要会话。那么如何定义一个可以访问servlet请求会话的UserType呢?

编辑:这里有一个问题的讨论,似乎没有解决方案:Best way to implement a Hibernate UserType after deprecations?

1 个答案:

答案 0 :(得分:0)

这在UserType界面的4.1 API中得到解决。

http://docs.jboss.org/hibernate/orm/4.1/javadocs/

UserType的方法签名将SessionImplementor传递给nullSafeGet并进行设置。

额外提示:请务必查看当前的Javadoc。