我们告诉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);
答案 0 :(得分:1)
是(见下文),但显而易见的问题是“为什么”? 为了得到相同的结果,这是很多工作。
但是,如果你必须...... fictionalMethodThatGeneratesIdentifiers()需要执行hibernate序列生成器所做的事情,这可能是您的特定数据库获取下一个序列号所需的任何内容。
如果您这样做,请注意文档说明:
指定的生成器使Hibernate使用unsaved-value =“undefined”。 这迫使Hibernate去数据库确定是否 实例是瞬态的或分离的,除非有版本或 timestamp属性,或者您定义Interceptor.isUnsaved()。
所以,我建议显式地将unsaved-value映射到-1,然后让你的对象初始化id值,否则你每次尝试保存实例时都会看到很多额外的开销