2011-02-08 9 views
8

Estoy creando un CompositeUserType en hibernación para asignar los campos EAST y NORTH a un objeto Coordinate. Actualmente mi objeto Coordinate es inmutable, y me gustaría mantenerlo así si es posible.Hibernate CompositeUserType para objeto inmutable

He escrito mi nullSafeGet, tirando de las coordenadas del conjunto de resultados y llamando al constructor:

@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); 
} 

no sé qué hacer con setPropertyValue, que parece querer establecer las coordenadas de uno en uno un momento. Es posible instanciar un objeto inmutable con CompositeUserType, o estoy tratando de hacer lo imposible?

(también tratando de averiguar qué hacer con Hibernate.INTEGER está obsoleta, pero una cosa a la vez ...)

Respuesta

11

setPropertyValue() nunca es llamado si isMutable() vuelve false, por lo que se puede tirar de ella UnsupportedOperationException .

Cuestiones relacionadas