Вручную присвойте значение спящему UUID - PullRequest
3 голосов
/ 22 марта 2011

Как мы знаем, в hibernate настройте генератор идентификатора на «uuid», тогда hibernate автоматически сгенерирует значение UUID в поле id при сохранении нового объекта. Если при настройке генератора на «назначено», idперед сохранением объекта должно быть присвоено значение.

И я обнаружил, что если при настройке генератора на uuid и присвоении идентификатору значения вручную, hibernate изменит значение на новое значение UUID.

У меня вопрос: когда генератор сконфигурирован как uuid, как вручную присвоить ему значение?

PS: я использую пружину HibernateDaoSupport для сохранения.

org.springframework.orm.hibernate3.support.HibernateDaoSupport.save(Ojbect obj)

Спасибо!

1 Ответ

9 голосов
/ 22 марта 2011

Если вам это нужно только в редких особых случаях, самый простой способ состоит в том, чтобы выдавать INSERT запросы в нативном SQL вместо использования save().

Кроме того, вы можете настроить генератор для достижения желаемого поведения:

public class FallbackUUIDHexGenerator extends UUIDHexGenerator {
    private String entityName;

    @Override
    public void configure(Type type, Properties params, Dialect d)
            throws MappingException {
        entityName = params.getProperty(ENTITY_NAME);
        super.configure(type, params, d);
    }

    @Override
    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {            
        Serializable id = session
            .getEntityPersister(entityName, object)
            .getIdentifier(object, session);       

        if (id == null)
            return super.generate(session, object);
        else
            return id;
    }
}

и настройте Hibernate для использования, указав полное имя как strategy.

...