jpa aktualizuje rekordy zamiast dodawać nowe

jpa aktualizuje rekordy zamiast dodawać nowe
JK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 107
0

Hej, mam mały problem, otóż mam napisaną aplikację, która ma za zadanie dodać rekord do bazy danych.
metoda która to realizuje wygląda tak:

Kopiuj
    public boolean addUser(User userData){
        factory = Persistence.createEntityManagerFactory(PERESISTENCE_UNIT_NAME);
        em = factory.createEntityManager();
        boolean status=false;
        try {
            em.getTransaction().begin();
            em.persist(userData);
            em.getTransaction().commit();
            status = true;
        } catch (RollbackException e) {
            em.getTransaction().rollback();
            status = false;
        }
        finally {
            em.close();
        }

        return status;
    }

Encja posiada:

Kopiuj
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id",unique = true)
    private int id;

i konfiguracja:

Kopiuj
         <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/java"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.connection.user" value="root"/>
            <property name="hibernate.connection.password" value=""/>
        </properties>

Wydaję mi się, że wcześniej to działało jak należy, tzn. po każdym requescie dodawało użytkownika do bazy danych, teraz dodaje tylko pierwszego, a przy kolejnych requestach ten pierwszy użytkownik zostaje zaktualizowany czy tam nadpisany.

Co może być nie tak?

__krzysiek85
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1019
0

Zamień "private int id;" na "private Integer id;" i upewnij się, że w chwili zapisu id jest nullem.

Istota
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

w pliku konfiguracyjnym powinieneś mieć update zamiast create.

<property name="hbm2ddl.auto">update</property>

możesz też zajrzeć tutaj:

CY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 27
0

Spróbuj:
userData.setId(null);
em.persist(userData);

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.