web-dev-qa-db-fra.com

hibernate crée une table vide - hibernate_sequence au démarrage

Je viens donc de télécharger hibernate 5.0.0.1 et d’essayer mon projet, qui utilise auparavant hibernate 4.3.

Lorsque j'insère dans la base de données, cela me donne l'erreur suivante:

ERREUR: impossible de lire une valeur hi - vous devez renseigner la table: hibernate_sequence

J'utilise mysql et ma stratégie de génération est définie sur GenerationType.auto. Il semble qu'actuellement, hibernate pense que l'utilisation de séquences est la meilleure stratégie pour générer des valeurs. Mais la table est vide. Je pense que hibernate essaie d'obtenir une valeur de la séquence mais n'en trouve aucune. Mais je suis confus parce que hibernate_sequence est créé par hibernate, ne devrait-il pas fournir une valeur initiale?

11
morbidCode

La table de séquence est due à la façon dont vous avez défini la clé primaire sur une/toutes vos entités.

@Id
@GeneratedValue(strategy = GenerationType.AUTO) // or GenerationType.SEQUENCE
protected Long id;

Si vous souhaitez utiliser la colonne d'identité d'une table:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;

Vous pouvez consulter ce fil pour plus d'informations: https://forums.hibernate.org/viewtopic.php?f=1&t=999785&start=0

@GeneratedValue JPA Annotation

Très souvent, dans ces tutoriels, nous avons utilisé le @GeneratedValue annotation pour que la base de données génère une clé primaire unique pour nous . Nous avons utilisé le type de génération par défaut dans chacun de nos exemples, mais il y a en fait quatre stratégies différentes pour avoir le primaire clé générée par la base de données. Ces quatre options sont:

SEQUENCE DE TABLE AUTO IDENTITY javax.persistence.GenerationType.AUTO

La stratégie de génération AUTO est la stratégie par défaut, et ce paramètre est simple choisit la stratégie de génération de clé primaire qui est la valeur par défaut pour la base de données en question, qui est généralement IDENTITY, bien que il peut s'agir de TABLE ou de SEQUENCE en fonction de l'état de la base de données configuré. La stratégie AUTO est généralement recommandée car elle rend votre code et vos applications les plus portables.

javax.persistence.GenerationType.IDENTITY

L'option IDENTITY permet simplement à la base de données de générer un .__ unique. clé primaire pour votre application. Aucune séquence ou table n'est utilisée pour conserver les informations de clé primaire, mais à la place, la base de données sera Il suffit de choisir un numéro unique et approprié que Hibernate peut attribuer au clé primaire de l'entité. Avec MySQL, le premier plus petit numéroté la clé primaire disponible dans la table en question est choisie, bien que Ce comportement peut différer d'une base à l'autre.

javax.persistence.GenerationType.Sequence

Certains fournisseurs de bases de données prennent en charge l’utilisation d’un objet séquence pour maintenir les clés primaires. Pour utiliser une séquence, vous définissez le Stratégie GenerationType à SEQUENCE, spécifiez le nom du générateur annotation, puis fournissez l'annotation @SequenceGenerator qui possède des attributs pour définir à la fois le nom de l'annotation de séquence, et le nom de l'objet de séquence réel dans la base de données.

20
John Manko

Il est créé parce qu'Hibernate utilise cette table pour suivre l'incrémentation automatique. ID (Valeur suivante de l'ID)

Ex-

@Id
@GeneratedValue
int id;
1
Rajitha Yasas