手动为Hibernate UUID赋值

4
我们知道,在Hibernate中,将ID的生成器配置为"uuid",那么当保存新对象时,Hibernate会自动生成一个UUID值到ID字段。如果将生成器配置为"assigned",则在保存对象之前必须为ID分配一个值。
我发现,如果将生成器配置为UUID并手动分配ID值,Hibernate会将该值更改为新的UUID值。
我的问题是,当将生成器配置为UUID时,如何手动分配值?
PS:我使用Spring HibernateDaoSupport进行保存。
org.springframework.orm.hibernate3.support.HibernateDaoSupport.save(Ojbect obj)

感谢您!

系统AA创建、保存和发送消息,并接收回复消息。在此过程中,消息的ID被用作关键标识。现在,系统BB的消息想要添加到AA中,并从AA接收回复消息。为了尽可能少地更改AA系统,我需要使用来自BB系统的ID作为AA系统中消息的ID。 - Geln Yang
1个回答

13

如果只在少数特殊情况下需要使用它,则最简单的方法是使用本机SQL发出INSERT查询,而不是使用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;
    }
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接