Hibernate CompositeUserType用于不可变对象

Pen*_*gin 9 java hibernate

我正在创建一个CompositeUserTypein Hibernate来映射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);
}
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做setPropertyValue,似乎想要一次设置一个坐标.可以实例化一个不可变对象CompositeUserType,或者我试图做不可能的事情?

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

axt*_*avt 12

setPropertyValue()如果isMutable()返回则永远不会被调用false,所以你可以从中抛出UnsupportedOperationException.