手动为休眠 UUID 分配值

发布于 2024-10-24 19:06:37 字数 375 浏览 4 评论 0原文

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

我发现,如果将生成器配置为 uuid 并手动为 id 分配一个值,hibernate 会将该值更改为新的 UUID。

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

PS:我使用spring HibernateDaoSupport来保存。

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

谢谢!

As we know, in hibernate, configure the generator of a id to "uuid" , then hibernate will auto generate a UUID value to the id field when saving a new object.If configuring the generator to "assigned", the id must be assigned a value before saving a object.

And I found that if configuring the generator to uuid and assigning the id a value manually, the hibernate will change the value to a new UUID one.

My question is, when the generator is configured as uuid, how to manually assign a value to it?

PS: I use spring HibernateDaoSupport to save.

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

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

箹锭⒈辈孓 2024-10-31 19:06:37

如果您仅在极少数特殊情况下需要它,最简单的方法是在本机 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;
    }
}

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

If you need it only in rare special cases, the simpliest way is to issue INSERT queries in native SQL instead of using save().

Alternatively, you can customize generator to achieve the desired behaviour:

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;
    }
}

and configure Hibernate to use it by setting its fully qualified name as strategy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文