1

I am unable to save data to h2 database using hibernate 5 and h2 database. I am using Intellj idea ultimate version. The database is created using the idea database tools. The test connection works fine.

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="connection.url">jdbc:h2:./rms</property>
    <property name="connection.driver_class">org.h2.Driver</property>
    <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>

    <!--<property name="connection.username">user</property>-->
    <!--<property name="connection.password">user</property>-->

    <!-- DB schema will be updated if needed -->
     <property name="hbm2ddl.auto">update</property>
    <mapping class="models.UsersEntity"/>
  </session-factory>
</hibernate-configuration>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sagar</groupId>
    <artifactId>RestrauntManagementSystem</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.1.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.198</version>
        </dependency>
    </dependencies>

</project>

UsersEntity.java

package models;

import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "RMS_USERS", schema = "PUBLIC", catalog = "RMS")
public class UsersEntity {
    private long id;
    private String username;
    private String password;

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    @Column(name = "ID", unique = true)
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @Basic
    @Column(name = "USERNAME", unique = true, nullable = false)
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Basic
    @Column(name = "PASSWORD", nullable = false)
    public String getPassword() {
        return password;
    }

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        UsersEntity that = (UsersEntity) o;

        if (id != that.id) return false;
        if (username != null ? !username.equals(that.username) : that.username != null) return false;
        if (password != null ? !password.equals(that.password) : that.password != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = (int) (id ^ (id >>> 32));
        result = 31 * result + (username != null ? username.hashCode() : 0);
        result = 31 * result + (password != null ? password.hashCode() : 0);
        return result;
    }
}

Main.java

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import models.UsersEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {

        final StandardServiceRegistry standardServiceRegistry = new StandardServiceRegistryBuilder().configure().build();

        SessionFactory sessionFactory = new MetadataSources(standardServiceRegistry).buildMetadata().buildSessionFactory();

        Session session = sessionFactory.openSession();
        session.beginTransaction();

        UsersEntity usersEntity = new UsersEntity();
        usersEntity.setUsername("sagar");
        usersEntity.setPassword("tamang");

        session.save(usersEntity);
        session.getTransaction().commit();
        session.close();

        launch(args);
    }
}

Following error occurs whenever I run the application. The doesn't get saved to the database at all.

/usr/lib/jvm/java-8-oracle/bin/java
-javaagent:/home/kazekage/Programs/idea-IU-183.5429.30/lib/idea_rt.jar=41025:/home/kazekage/Programs/idea-IU-183.5429.30/bin
-Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar:/usr/lib/jvm/java-8-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jfxrt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-8-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jce.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfxswt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar:/usr/lib/jvm/java-8-oracle/jre/lib/management-agent.jar:/usr/lib/jvm/java-8-oracle/jre/lib/plugin.jar:/usr/lib/jvm/java-8-oracle/jre/lib/resources.jar:/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:/home/kazekage/IdeaProjects/RestrauntManagementSystem/target/classes:/home/kazekage/.m2/repository/org/hibernate/hibernate-core/5.4.1.Final/hibernate-core-5.4.1.Final.jar:/home/kazekage/.m2/repository/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar:/home/kazekage/.m2/repository/javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar:/home/kazekage/.m2/repository/org/javassist/javassist/3.24.0-GA/javassist-3.24.0-GA.jar:/home/kazekage/.m2/repository/net/bytebuddy/byte-buddy/1.9.5/byte-buddy-1.9.5.jar:/home/kazekage/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar:/home/kazekage/.m2/repository/org/jboss/spec/javax/transaction/jboss-transaction-api_1.2_spec/1.1.1.Final/jboss-transaction-api_1.2_spec-1.1.1.Final.jar:/home/kazekage/.m2/repository/org/jboss/jandex/2.0.5.Final/jandex-2.0.5.Final.jar:/home/kazekage/.m2/repository/com/fasterxml/classmate/1.3.4/classmate-1.3.4.jar:/home/kazekage/.m2/repository/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar:/home/kazekage/.m2/repository/org/dom4j/dom4j/2.1.1/dom4j-2.1.1.jar:/home/kazekage/.m2/repository/org/hibernate/common/hibernate-commons-annotations/5.1.0.Final/hibernate-commons-annotations-5.1.0.Final.jar:/home/kazekage/.m2/repository/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar:/home/kazekage/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar:/home/kazekage/.m2/repository/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar:/home/kazekage/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar:/home/kazekage/.m2/repository/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar:/home/kazekage/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar:/home/kazekage/.m2/repository/com/h2database/h2/1.4.198/h2-1.4.198.jar sample.Main Gtk-Message: 22:57:05.286: Failed to load module "canberra-gtk-module" Mar 02, 2019 10:57:05 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.4.1.Final} Mar 02, 2019 10:57:06 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final} Mar 02, 2019 10:57:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) Mar 02, 2019 10:57:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:./rms] Mar 02, 2019 10:57:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {} Mar 02, 2019 10:57:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false Mar 02, 2019 10:57:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init> INFO: HHH000115: Hibernate connection pool size: 20 (min=1) Mar 02, 2019 10:57:06 PM org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect Mar 02, 2019 10:57:07 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@45394b31] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Mar 02, 2019 10:57:07 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] Hibernate: 
    select
        max(ID) 
    from
        RMS_USERS Hibernate: 
    insert 
    into
        RMS.PUBLIC.RMS_USERS
        (PASSWORD, USERNAME, ID) 
    values
        (?, ?, ?) Mar 02, 2019 10:57:07 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN: SQL Error: 23505, SQLState: 23505 Mar 02, 2019 10:57:07 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: Unique index or primary key violation: "PUBLIC.UK_59HEUM0SN7LLCEW3CL5FKFBEL_INDEX_8 ON PUBLIC.RMS_USERS(USERNAME) VALUES 1"; SQL statement: insert into RMS.PUBLIC.RMS_USERS (PASSWORD, USERNAME, ID) values (?, ?, ?) [23505-198] Mar 02, 2019 10:57:07 PM org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure ERROR: HHH000346: Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute statement] java.lang.reflect.InvocationTargetException     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:498)     at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)     at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:498)     at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement  at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)   at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)   at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)   at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1490)    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:515)    at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3348)   at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2519)    at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:473)     at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:178)  at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:39)     at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:271)   at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:104)   at sample.Main.main(Main.java:40)   ... 11 more Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59)  at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)     at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178)   at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3175)     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3689)     at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:90)     at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478)    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356)     at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1484)    ... 20 more Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PUBLIC.UK_59HEUM0SN7LLCEW3CL5FKFBEL_INDEX_8 ON PUBLIC.RMS_USERS(USERNAME) VALUES 1"; SQL statement: insert into RMS.PUBLIC.RMS_USERS (PASSWORD, USERNAME, ID) values (?, ?, ?) [23505-198]     at org.h2.message.DbException.getJdbcSQLException(DbException.java:457)     at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)     at org.h2.message.DbException.get(DbException.java:205)     at org.h2.message.DbException.get(DbException.java:181)     at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:103)  at org.h2.mvstore.db.MVSecondaryIndex.checkUnique(MVSecondaryIndex.java:220)    at org.h2.mvstore.db.MVSecondaryIndex.add(MVSecondaryIndex.java:196)    at org.h2.mvstore.db.MVTable.addRow(MVTable.java:703)   at org.h2.command.dml.Insert.insertRows(Insert.java:180)    at org.h2.command.dml.Insert.update(Insert.java:132)    at org.h2.command.CommandContainer.update(CommandContainer.java:133)    at org.h2.command.Command.executeUpdate(Command.java:267)   at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)  at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154)  at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)   ... 28 more Exception running application sample.Main

Process finished with exit code 1
0

1 Answer 1

1

The error message states ...Failed to load module "canberra-gtk-module".... If your operating system is linux, installing gtk and gtk3 modules should solve the issue.

sudo apt install libcanberra-gtk-module libcanberra-gtk3-module

(Extracted from here)

Sign up to request clarification or add additional context in comments.

1 Comment

Now, no error occurs. But the data is not saved to the database at all.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.