Java 不可变对象的Hibernate CompositeUserType
我正在hibernate中创建一个Java 不可变对象的Hibernate CompositeUserType,java,hibernate,Java,Hibernate,我正在hibernate中创建一个CompositeUserType,以将EAST和NORTH字段映射到坐标对象。目前,我的坐标对象是不变的,如果可能的话,我希望保持不变 我已经编写了我的nullSafeGet,从结果集中提取坐标并调用构造函数: @Override public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
CompositeUserType
,以将EAST
和NORTH
字段映射到坐标对象。目前,我的坐标对象是不变的,如果可能的话,我希望保持不变
我已经编写了我的nullSafeGet
,从结果集中提取坐标并调用构造函数:
@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被弃用的问题,但一次只能做一件事……)如果isMutable()
返回false
,则永远不会调用setPropertyValue(),因此您可以从中抛出UnsupportedOperationException