生成用于Hibernate的“已分配”生成器的标识符

时间:2011-11-26 09:58:14

标签: java hibernate sequence

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

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

我希望使用<generator class="assigned">。根据文件:

  

assigned

     

允许应用程序在调用save()之前为对象分配标识符。

有没有办法配置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);

1 个答案:

答案 0 :(得分:1)

是(见下文),但显而易见的问题是“为什么”? 为了得到相同的结果,这是很多工作。

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

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

  

指定的生成器使Hibernate使用unsaved-value =“undefined”。   这迫使Hibernate去数据库确定是否   实例是瞬态的或分离的,除非有版本或   timestamp属性,或者您定义Interceptor.isUnsaved()。

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