gpt4 book ai didi

java - 生成与 Hibernate 的 "assigned"生成器一起使用的标识符

转载 作者:行者123 更新时间:2023-12-01 15:39:38 24 4
gpt4 key购买 nike

我们告诉 Hibernate 如何使用 <generator> 生成标识符标签。例如:

<generator class="sequence">
<param name="sequence">person_id_sequence</param>
</generator>

我想使用<generator class="assigned"> 。根据文档:

assigned

lets the application assign an identifier to the object before save() is called.

有没有办法配置 sequence我可以使用它来生成分配给我的对象的标识符的生成器?

这大致就是我想要做的:

Session session = ...;

// This will use the "sequence" generator:
Integer id = session.fictionalMethodThatGeneratesIdentifiers(Person.class);

Person person = new Person();
person.setId(id);
person.setName("Adam");

// This will use the "assigned" generator:
session.save(person);

最佳答案

是的(见下文),但明显的问题是“为什么”?为了达到相同的结果需要做大量的工作。

但是,如果您必须...fictionalMethodThatGeneratesIdentifiers() 需要执行 hibernate 序列生成器执行的操作,这可能是您的特定数据库获取下一个序列号所需的任何操作。

如果您这样做,请注意文档中的说明:

The assigned generator makes Hibernate use unsaved-value="undefined". This forces Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define Interceptor.isUnsaved().

所以,我建议显式地将未保存值映射到 -1,并让你的对象将 id 值初始化为该值,否则每次尝试保存实例时你都会看到很多额外的开销.

关于java - 生成与 Hibernate 的 "assigned"生成器一起使用的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8277636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com