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