手动为休眠UUID分配值

Gel*_*ang 3 database uuid spring hibernate

我们知道,在hibernate中,将id的生成器配置为"uuid",然后hibernate将在保存新对象时自动为id字段生成UUID值.如果将生成器配置为"assigned",则必须分配id保存对象之前的值.

我发现如果将生成器配置为uuid并手动为id赋值,则hibernate会将值更改为新的UUID值.

我的问题是,当生成器配置为uuid时,如何手动为其分配值?

PS:我使用spring HibernateDaoSupport来保存.

org.springframework.orm.hibernate3.support.HibernateDaoSupport.save(Ojbect obj)
Run Code Online (Sandbox Code Playgroud)

谢谢!

axt*_*avt 9

如果只在极少数特殊情况下需要它,最简单的方法是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

并通过将其完全限定名称设置为Hibernate来使用它strategy.