5

我在我的项目中使用 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;

    ...

}

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

  1. 为什么 SequenceGenerator(来自 javax.persistence)的默认值 allocationSize 设置为 50 而不是 1?那有什么利益呢?
  2. Hibernate 用于计算生成的 ID 的默认算法是什么?似乎 Hibernate 使用了由我的 Oracle 数据库托管的序列返回的值,但是在将其分配给我的实体之前对其进行了修改......
4

1 回答 1

-1
  1. 这是出于性能原因(预取)
  2. 阅读休眠源代码。
于 2009-02-10T22:15:09.663 回答