2009-01-21 79 views
5

我在我的项目中使用Hibernate,并且我的许多实体使用序列作为技术密钥。 例如:如何通过JPA和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)具有一个默认值分配大小设置为50而不是1?那有什么好处呢?
  2. Hibernate用来计算生成的ID的默认算法是什么?看来,Hibernate使用通过我的Oracle数据库托管序列返回的值,但随后将其分配给我的实体之前修改...

回答

0
  1. 这是出于性能的考虑(预取)
  2. 阅读休眠源代码。