2009-01-21 12 views
5

Ich verwende Hibernate in meinem Projekt, und viele meiner Entitäten verwenden eine Sequenz für ihre technischen Schlüssel. Zum Beispiel:Wie werden die Sequenzen von JPA und Hibernate verwaltet?

@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; 

    ... 

} 

Ich habe zwei Fragen über die von Hibernate generierte ID, wenn ein neues Objekt dieser Klasse beibehalten wird:

  1. Warum SequenceGenerator (von javax.persistence) einen Standardwert hat von allocationSize auf 50 statt 1 gesetzt? Was sind die Interessen?
  2. Welcher Standardalgorithmus wird von Hibernate zur Berechnung der generierten ID verwendet? Es scheint, dass Hibernate den Wert durch die Sequenz gehostet durch meine Oracle-Datenbank zurück verwendet, aber es dann ändern, bevor es zu meiner Einheit zuweisen ...

Antwort

0
  1. Dies aus Gründen der Performance ist (Prefetching)
  2. lesen der Hibernate-Quellcode.