【发布时间】:2013-12-27 17:29:52
【问题描述】:
我有一个代码,它使用 JPA 注释生成 DB 主键。DB 序列用于生成 PK.Am 使用 Oracle DB
@Id
@Column(name = "rec_id", scale = 0)
@GeneratedValue(generator = "RecIdSequence", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "RecIdSequence", sequenceName = "P_REC_ID_SEQUENCE")
public Long getRecordId() {
return outboundPackageRecordId;
}
现在我对此的理解是:DB sequencer 返回的sequence id 用作rec_id。 这是正确的吗?
文档说:
顺序策略 序列策略由两部分组成——定义一个命名序列和在一个或多个字段中使用命名序列 更多课程。 @SequenceGenerator 注解用于定义一个 序列并接受名称、初始值(默认为 1)和 分配大小(默认为 50)。序列是全局的 应用并且可以被一个或多个领域中的一个或多个领域使用 类。 @GeneratedValue 中使用了 SEQUENCE 策略 将给定字段附加到先前定义的命名的注释 顺序:
@Entity
@SequenceGenerator(name="seq", initialValue=1, allocationSize=100) // Define a sequence - might also be in another class:
public class EntityWithSequenceId {
// Use the sequence that is defined above:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
@Id long id;
}
与 AUTO 和 IDENTITY 不同,SEQUENCE 策略生成自动 一旦新的实体对象被持久化(即之前 犯罪)。当需要主键值时,这可能很有用 早些时候。为了尽量减少到数据库服务器的往返次数,ID 是 分组分配。指定每个分配中的 ID 数量 通过 allocationSize 属性。有可能是某些ID 在给定的分配中不会使用。因此,该策略确实 不保证序列值不会有空缺。
【问题讨论】: