• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JAVA/HIBERNATE Automatyczne generowanie kluczy

42 Warsaw Coding Academy
0 głosów
410 wizyt
pytanie zadane 21 sierpnia 2019 w Java przez Bartek Kotarski Początkujący (480 p.)

Dzień dobry,

Mam mały problem z auto-inkrementacją kluczy głównych w bazie MySql zarządzaną za pomocą Hibernate z poziomu Javy. Obecnie używam hibernate 5.4.2. Kiedy używam adnotacji @GeneratedValue to obiekt nie jest zapisywany w bazie. Jeżeli ręcznie przypiszę wartość liczbową do pola userId to obiekt jest zapisywany. Zależałoby mi, aby automatycznie inkrementowały się klucze bez ingerencji programisty. Wie ktoś jak to można naprawić ? 


import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name = "USER")
public class User implements Serializable
{

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ")
    @SequenceGenerator(name = "USERS_SEQ", sequenceName = "SEQUENCE_USERS")
    private long userId;

    @Column(nullable = false,unique = true)
    private String nick;

    @Column(nullable = false)
    private String password;

    public User() {
    }

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getNick() {
        return nick;
    }

    public void setNick(String nick) {
        this.nick = nick;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}


----------------------------------------------------------------
//Konfiguracja i zapis
public class Connection {

    private static SessionFactory sessionFactory;

    static
    {
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
        sessionFactory = new MetadataSources(serviceRegistry).addAnnotatedClass(User.class).addAnnotatedClass(Note.class).buildMetadata().buildSessionFactory();
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}


public class MainDao {

    private static Session session;

    public static void saveInDataBase(Serializable serializable)
    {
        try{
            session = Connection.getSessionFactory().openSession();
            session.beginTransaction();
            session.save(serializable);
            session.getTransaction().commit();

        }catch (Exception e)
        {
            session.getTransaction().rollback();
            e.getMessage();
        }
        finally {
            session.close();
        }

    }

}



----------------------------------------------------------------


<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- JDBC Database connection settings -->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/javabase?serverTimezone=UTC</property>
        <property name="connection.username">java</property>
        <property name="connection.password">password</property>
        <!-- JDBC connection pool settings ... using built-in test pool -->
        <property name="connection.pool_size">1</property>
        <!-- Select our SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- Echo the SQL to stdout -->
        <property name="show_sql">true</property>
        <!-- Set the current session context -->
        <property name="current_session_context_class">thread</property>
        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>
        <!-- dbcp connection pool configuration -->
        <property name="hibernate.dbcp.initialSize">5</property>
        <property name="hibernate.dbcp.maxTotal">20</property>
        <property name="hibernate.dbcp.maxIdle">10</property>
        <property name="hibernate.dbcp.minIdle">5</property>
        <property name="hibernate.dbcp.maxWaitMillis">-1</property>

    </session-factory>

</hibernate-configuration>

 

 

 

komentarz 21 sierpnia 2019 przez Aisekai Nałogowiec (42,190 p.)
A jakiś błąd rzuca? W catch wrzuć e.printStackTrace().
1
komentarz 22 sierpnia 2019 przez Bartek Kotarski Początkujący (480 p.)

Dziękuję! Faktycznie, dałem złe wyrzucanie błędów przez co nie wiedziałem gdzie jest błąd. Poniższej zamieszczam rozwiązanie: 
 

<property name="connection.pool_size">1</property>

na 

<property name="connection.pool_size">100</property>

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 599 wizyt
0 głosów
0 odpowiedzi 218 wizyt
pytanie zadane 8 marca 2019 w Java przez Piotr Kusnierkiewicz Użytkownik (670 p.)
0 głosów
1 odpowiedź 265 wizyt
pytanie zadane 1 sierpnia 2017 w Java przez lewy Obywatel (1,260 p.)

93,377 zapytań

142,379 odpowiedzi

322,528 komentarzy

62,726 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...