Hibernate CompositeUserType用于不可变对象

时间:2011-02-08 08:27:00

标签: java hibernate

我正在hibernate中创建CompositeUserType,以将EASTNORTH字段映射到Coordinate对象。目前我的Coordinate对象是不可变的,如果可能的话我想保持这种方式。

我写了nullSafeGet,从ResultSet中拉出坐标并调用构造函数:

@Override
public Object nullSafeGet(ResultSet rs, String[] names,
            SessionImplementor session, Object owner)
            throws HibernateException, SQLException {
    Integer easting = (Integer)Hibernate.INTEGER.nullSafeGet(rs, names[0]);
    Integer northing = (Integer)Hibernate.INTEGER.nullSafeGet(rs, names[1]);
    if(easting==null || northing==null)
        return null;
    return new Coordinate(easting, northing);
}

我不知道如何处理setPropertyValue,它似乎想要一次设置一个坐标。可以使用CompositeUserType实例化不可变对象,或者我正在尝试做不可能的事情?

(还试图弄清楚如何处理Hibernate.INTEGER,但一次只做一件事......)

1 个答案:

答案 0 :(得分:12)

如果setPropertyValue()返回isMutable(),则永远不会调用{p> false,因此您可以从中UnsupportedOperationException投掷。{/ p>