| At saving entity I got following error:
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
Entity:
@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() { }
}
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:
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);
Content of hibernate.cfg.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>
create</property>-->
<mapping class="com.bisit.entity.Permission"/>
<mapping class="com.bisit.entity.Role"/>
<mapping class="com.bisit.entity.User"/>
<mapping class="com.bisit.entity.InternalDatabase"/>
</session-factory>
</hibernate-configuration>
Source code:
Transaction tx = null;
try (final var session = HibernateSessionFactory.getInstance().openSession()) {
tx = session.beginTransaction();
session.save(c); 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());
}
}
}
|