2011-02-08 101 views
8

我在休眠中創建CompositeUserType以將EASTNORTH字段映射到座標對象。目前我的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,這似乎是想在設置COORDS一個做一次。有可能用CompositeUserType實例化一個不可變的對象,或者我正在嘗試做不可能的事情?

(也試圖找出如何對待Hibernate.INTEGER被棄用,但一兩件事的時間......)

回答

11

setPropertyValue()不會被調用,如果isMutable()回報false,所以你可以從它扔UnsupportedOperationException