Hibernate @generatedvalue pour HSQLDB
J'ai de la définition suivante pour un champ id dans une entité qui est mappé à une table dans HSQLDB.
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
private Integer id;
...
Mais cela ne semble pas générer un identifiant unique; au contraire, une tentative est faite pour insérer la valeur null dans la colonne qui entraîne l'échec. Si, j'ai créer manuellement une séquence et la stratégie de génération de l'utilisation de cette séquence, puis les données sont conservées comme prévu.
N'est pas une stratégie de génération de l'auto implique que le fournisseur (mise en veille prolongée dans ce cas) va automatiquement choisir la bonne approche et de faire tout le levage lourd que nécessaire (création de la séquence, l'utilisation d'une approche autochtone ou tout ce qui fonctionne pour que la plate-forme en particulier)? Est ma compréhension incorrecte?
OriginalL'auteur calvinkrishy | 2010-08-29
Vous devez vous connecter pour publier un commentaire.
En théorie (la valeur par défaut d'IDENTITÉ avec HSQLDB) et cela fonctionne pour moi. Cela soulève les questions suivantes:
org.hibernate.tool.hbm2ddl
si nécessaire)?Voici un exemple de DDL pour une entité
Foo
lors de l'utilisation de HSQLDB:Alors vous avez votre réponse, utilisez un
IDENTITY
colonne.Alors qu'Hibernate ne fait de choisir la bonne stratégie et de ne générer approprié
INSERT
consolidés (en passantnull
dans l'id qui devrait être conservé dans unIDENTITY
colonne), il ne sera pas de créer ou de modifier votre modèle physique si vous n'utilisez pas le DDL de production et d'exportation des capacités.Pour certains reasone la commande DDL qui est générée dans mon cas est:CREATE TABLE employés (id BIGINT not NULL, nom VARCHAR(50) not NULL, CONSTRAINT PK_EMPLOYEES PRIMARY KEY (id)); l'Absence d'identité est utilisée à tous.
OriginalL'auteur Pascal Thivent
J'ai eu le même problème lors de l'utilisation d'un
JpaSchemaGenerator
classe utilitaire que j'ai écrit.Lors de la génération du schéma pour une
org.hibernate.dialect.HSQLDialect
(où j'utilise une SÉQUENCE pour générer mes Identifiants uniques), j'utilise la suite Hibernate propriété:hibernate.id.new_generator_mappings=true
Cette résultats dans la suite de
CREATE
déclaration:Mais quand je l'utilise même bien dans ma classe utilitaire pour générer un schéma à l'aide de la
org.hibernate.dialect.HSQLDialect
, j'ai leCREATE
déclaration:Cela signifie que si j'ai créé un Batch sans un ID, il ne serait pas générer pour moi et pour le
NOT NULL
contrainte provoquer une exception.Si je change la propriété Hibernate à la suivante:
hibernate.id.new_generator_mappings=false
Ensuite, il serait de générer la suite de
CREATE
déclaration:Qui fonctionne parfaitement lors de la création d'entités JPA Hibernate.
OriginalL'auteur Dieter Hubau