2009-01-21 15 views
5

Używam Hibernate w moim projekcie, a wiele moich podmiotów używa sekwencji dla ich kluczy technicznych. Na przykład:W jaki sposób zarządzane są sekwencje według JPA i 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; 

    ... 

} 

mam dwa pytania o ID generowanego przez Hibernate, gdy nowy obiekt tej klasy jest zachowywane:

  1. Dlaczego SequenceGenerator (od javax.persistence) ma wartość domyślną allocSize ustawiony na 50 zamiast 1? Jakie są tego interesy?
  2. Jaki jest domyślny algorytm używany przez Hibernate do obliczenia wygenerowanego identyfikatora? Wydaje się, że Hibernate używa wartości zwróconej przez sekwencję gospodarzem mojej bazy danych Oracle, ale następnie modyfikować je przed przypisaniem go do mojego podmiot ...

Odpowiedz

0
  1. To ze względu na wydajność (prefetching)
  2. Czytaj kod źródłowy hibernacji.
Powiązane problemy