Hibernate CompositeUserType для неизменяемого объекта - PullRequest
9 голосов
/ 08 февраля 2011

Я создаю 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, но по одной вещи за раз...)

1 Ответ

12 голосов
/ 08 февраля 2011

setPropertyValue() никогда не вызывается, если isMutable() возвращает false, поэтому вы можете выбросить UnsupportedOperationException из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...