At saving entity I got following error:
{quote}19:26:28.595 \ [JavaFX Application Thread] ERROR com.xxx.DatabaseConnectionsController - cannot save DB connection: class org.hibernate.id.IdentifierGeneratorHelper$2 cannot be cast to class java.lang.Long (org.hibernate.id.IdentifierGeneratorHelper$2 is in module org.hibernate.orm.core@6.0.0.Alpha2 of loader 'app'; java.lang.Long is in module java.base of loader 'bootstrap') 19:26:28.599 \ [JavaFX Application Thread] ERROR com.xxx.DatabaseConnectionsController - org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@67ea3277 is closed{quote}
Entity:
{code:java} @Entity @Table(name = "internal_database") public class InternalDatabase { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id;
@Column(name = "name", nullable = false, unique = true) private String name;
@Column(name = "conn_str", nullable = false) private String connectionString;
@Column(name = "username") private String username;
@Column(name = "password") private String password;
@Column(name = "query") private String query;
public InternalDatabase() { } } {code}
As you can see, I use GenerationType.IDENTITY as strategy for 'id' field. I try to use other strategies (AUTO), but without results.
I tried to create table via SQL-script, but it didn't help:
{code:sql} -- Entity: InternalDatabase CREATE TABLE IF NOT EXISTS INTERNAL_DATABASE ( ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, NAME VARCHAR(100) NOT NULL, CONN_STR VARCHAR(300) NOT NULL, USERNAME VARCHAR(100) NOT NULL, PASSWORD VARCHAR(100) NOT NULL, QUERY VARCHAR(500) DEFAULT '' );
ALTER TABLE "INTERNAL_DATABASE" ADD CONSTRAINT INTERNAL_DATABASE_NAME UNIQUE (NAME); {code}
Content of hibernate.cfg.xml:
{code:xml} <hibernate-configuration xmlns="http://www.hibernate.org/xsd/orm/cfg"> <session-factory> <property name="connection.url">jdbc:h2:file:./xa;ifexists=true</property> <property name="connection.driver_class">org.h2.Driver</property> <property name="dialect">org.hibernate.dialect.H2Dialect</property> <property name="show_sql">true</property> <!-- <property name="hbm2ddl.auto">create</property>-->
<mapping class="com. bisit xxx .entity.Permission"/> <mapping class="com. bisit xxx .entity.Role"/> <mapping class="com. bisit xxx .entity.User"/> <mapping class="com. bisit xxx .entity.InternalDatabase"/> </session-factory> </hibernate-configuration> {code}
Source code: {code:java} Transaction tx = null; try (final var session = HibernateSessionFactory.getInstance().openSession()) { tx = session.beginTransaction(); session.save(c); // where c is instance of type InternalDatabase tx.commit(); } catch (Exception ex) { logger.error("cannot save DB connection: {}", ex.getMessage()); if (tx != null && (tx.getStatus() == TransactionStatus.ACTIVE || tx.getStatus() == TransactionStatus.MARKED_ROLLBACK)) { try { tx.rollback(); } catch (Exception nex) { logger.error(nex.getMessage()); } } } {code} |
|