【问题标题】:Manually assign value to a hibernate UUID手动为休眠 UUID 赋值
【发布时间】:2011-03-22 11:43:46
【问题描述】:

众所周知,在hibernate中,将id的生成器配置为“uuid”,那么hibernate在保存新对象时会自动为id字段生成一个UUID值。如果将生成器配置为“assigned”,则id必须在保存对象之前分配一个值。

而且我发现如果将生成器配置为 uuid 并手动为 id 分配值,则休眠会将值更改为新的 UUID。

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

PS:我使用spring HibernateDaoSupport来保存。

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

谢谢!

【问题讨论】:

  • 系统AA创建、保存和发送消息,并接收回复消息。在此过程中,消息的 id 用作密钥标志。现在,系统 BB 有消息要添加到 AA 中,并接收来自 AA 的回复消息。为了在系统 AA 上做最少的更改,我需要使用系统 BB 中的 id 作为系统 AA 中消息的 id。

标签: database hibernate spring uuid


【解决方案1】:

如果您仅在极少数特殊情况下需要它,最简单的方法是在原生 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 以使用它。

【讨论】:

    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2011-04-17
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多