我正在hibernate中创建CompositeUserType
,以将EAST
和NORTH
字段映射到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,但一次只做一件事......)
答案 0 :(得分:12)
setPropertyValue()
返回isMutable()
,则永远不会调用{p> false
,因此您可以从中UnsupportedOperationException
投掷。{/ p>