JPA 2.0 @ID @GeneratedValue wzrasta o 50

0

Witam, mam problem polaczylem sie za pomoca JPA 2.0 z baza danych MySQL , w moim Entity mam pole

 
@ID @GeneratedValue (strategy = GenerationType.Auto)
private long id;

Metoda main wprowadza wszystkie dane poprawnie do bazy danych ale generowana wartosc dla kolumny ID wzrasta o 50
1 -> 51 -> 101 -> 151 ...

Jak zmienic aby wzrastala o 1 ?

0

Zamiast auto wybierz jawnie jakis generator, najpewniejszy jest chyba TableGenerator poniewaz zadziala dla kazdej bazy danych. Przyklad jak uzyc masz tutaj:
http://download.oracle.com/javaee/6/api/
W pierwszym przykladzie masz rowniez 'allocatedSide' ustawione na 1 - to wlasnie jest to o co Tobie chodzi.

Mozesz wkleic kod w ktorym zapisujesz do bazy? Ciekawi mnie co sie dzieje ze zapisuje Ci co 50. Musisz to robic w osobnych entity managerach albo cos takiego.

0
public class Main {

  
    public static void main(String[] args) {

        Samochod samochod = new Samochod();
        samochod.setMarka("Honda");
        samochod.setModel("Civic");
        samochod.setPojemnosc(1.6);
        samochod.setMoc(110);

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("PU");
        EntityManager em = emf.createEntityManager();


        EntityTransaction tx = em.getTransaction();
        tx.begin();

        em.persist(samochod);
        tx.commit();

        em.close();
        emf.close();


      
    } 

tak robie to w osobnych EntityManager'ach bo na uruchomienie metody Main przypada jedna jego instancja i jeden wpis do bazy danych. Kazdy nastepny wpis odbywał się przy ponownym uruchomieniu Main'a

0

Czyli oto co sie prawdopodobnie dzialo: ten auto generator w mysql pewnie oznaczal Tablegenerator, z buforem 50, a to dziala tak, ze na poczatku entity manager bierze ostatnia wartosc, dodaje do niej 50, zapisuje do bazy, i ma dostepne 50 wpisow. Jak wszystko wykorzysta, dalej robi selecta, dodaje 50 i zapisuje. Ty wykorzystywales tylko 1 id z tej puli, ale nastepne EM o tym nie wiedzialy.
Pamietaj ze bufor 1 powoduje ze za kazdym razem jest zapytanie do bazy i prawdopodobnie insert tylko po to aby dostac id - moze to byc problemem, bo zamiast jednego inserta masz za kazdym razem 3 operacje: select id, insert id + 1, insert twojego obiektu.

0

ok, dzięki wielkie!

0

Wystarczyło dodać :

@GeneratedValue(generator="my_seq")
    @SequenceGenerator(name="my_seq",sequenceName="MY_SEQ", allocationSize=1)

I już zwiększa się o 1.

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