如何通过JPA和Hibernate管理序列?

Rom*_*las 5 hibernate jpa sequences

我在我的项目中使用Hibernate,我的许多实体使用序列作为他们的技术密钥.例如:

@Entity
@Table(name = "T_MYENTITY")
@SequenceGenerator(name = "S_MYENTITY", sequenceName = "S_MYENTITY")
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "S_MYENTITY")
    @Column(name = "MY_ENTITY_ID")
    private Long entityId;

    ...

}
Run Code Online (Sandbox Code Playgroud)

关于此类的新对象持久化时,我有两个关于Hibernate生成的ID的问题:

  1. 为什么SequenceGenerator(来自javax.persistence)的allocateSize的默认值设置为50而不是1?有什么好处?
  2. Hibernate用于计算生成的ID的默认算法是什么?看来Hibernate使用我的Oracle数据库托管的序列返回的值,但是在将它分配给我的实体之前修改它...

kaz*_*aki -1

  1. 这是出于性能原因(预取)
  2. 阅读休眠源代码。