JPA problem z kluczem

JPA problem z kluczem
0
Kopiuj
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator1")
@SequenceGenerator(sequenceName = "sequence2", name = "generator1",
allocationSize = 1, initialValue = 1)
private int		id;
Kopiuj
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Employee");
		entityManager = emf.createEntityManager();
		
		Employee us = new Employee();
		us.setFirstname("John");
		us.setLastname("John");
		entityManager.getTransaction().begin();
		entityManager.persist(us);
		entityManager.getTransaction().commit();

Tabela wyglada tak:

id | firstname | lastname
1 | John | John
3 | John | John

Moje pytanie: dlaczego drugie ID jest 3 a nie 2 ? przeciez ustawilem wczesniej, ze zmienia sie co 1..

0

Zapomniałem dodać, że baza to PostgreSQL. Jeśli zmienie generowanie na co 2 numery, to będą co 4..

airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 7 lat
  • Postów:274
0

W postgresie możesz śmiało korzystać z @GeneratedValue(strategy = GenerationType.IDENTITY).

Natomiast co do problemu. EntityManager przy generatorze alokuje sobie kilka kluczy, tak żeby zaoszczędzić ilość zapytań o ID następnego klucza przy każdym zapytaniu. Jeżeli masz kilka EntityManagerów (albo jeżeli uruchomisz aplikację dwa razy) kolejny EM zajmie dla siebie kolejną pulę dostępnych ID. Szerzej o problemie i rozwiązaniu (allocationSize) możesz przeczytać tutaj http://royontechnology.blogspot.com/2010/04/note-on-allocationsize-parameter-of.html

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.