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>