J'ai une configuration où la base de données Oracle (12c) est utilisée en production et HSQLDB (en mémoire) est utilisée pour les cas de test. J'utilise Liquibase pour mettre à jour la base de données.Problèmes avec la génération automatique d'identité en utilisant JPA2 sur HSQLDB
J'ai la classe suivante:
@Entity
@Table(name = "SYSTEM")
public class System {
@ApiModelProperty(hidden = true)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", columnDefinition = "BIGINT")
private Long id;
@NotNull
@Size(max = 40)
@Column(name = "NAME", columnDefinition = "NVARCHAR2")
private String name;
@Size(max = 16)
@GeneratedValue
@Column(name = "TOKEN", columnDefinition = "VARBINARY")
private UUID token;
}
La définition Liquibase J'utilise pour cette table est:
"createTable": {
"tableName": "SYSTEM",
"columns": [
{
"column": {
"name": "ID",
"type": "BIGINT",
"autoIncrement": true,
"constraints": {
"primaryKey": true
}
}
},
{
"column": {
"name": "NAME",
"type": "VARCHAR2(40)",
"constraints": {
"nullable": false
}
}
},
{
"column": {
"name": "TOKEN",
"type": "RAW(16)",
"constraints": {
"nullable": false
}
}
}
]
}
Lors de la création d'un nouveau système en utilisant un EntityManager.persist sur la base de données Oracle fonctionne ce . Une ligne est insérée dans la base de données et le champ ID est rempli avec une valeur comme prévu.
Cela ne se produit pas dans la base de données HSQLDB. Et pour moi, il semble que la génération automatique ne soit pas déclenchée.
Le SQL exécuté par HSQLDB pour créer la table SYSTEM est:
CREATE TABLE PUBLIC."SYSTEM" (ID BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, NAME VARCHAR2(40) NOT NULL, TOKEN RAW(16) NOT NULL, CONSTRAINT PK_SYSTEM PRIMARY KEY (ID))
Yat-il un bug savoir dans HSQLDB ou que je fais quelque chose de mal?
S'il s'agissait d'un bogue, _h2 database_ serait une alternative - aussi w.r.t. Liquibase. Il a même un mode de compatibilité Oracle. –
Si c'est un bug ou si je ne trouve pas de solution, je vais essayer h2. Merci pour la suggestion. – jkc