JPA problem z kluczem

0
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator1")
@SequenceGenerator(sequenceName = "sequence2", name = "generator1",
allocationSize = 1, initialValue = 1)
private int		id;
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..

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1