Maison >base de données >tutoriel mysql >Comment réparer l'inclusion inattendue de champs d'incrémentation automatique d'Hibernate dans les instructions MySQL INSERT ?

Comment réparer l'inclusion inattendue de champs d'incrémentation automatique d'Hibernate dans les instructions MySQL INSERT ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 16:25:14954parcourir

How to Fix Hibernate's Unexpected Auto-Increment Field Inclusion in MySQL INSERT Statements?

Annotation du champ d'auto-incrémentation MySQL avec les annotations JPA

Dans JPA, l'annotation @GeneratedValue est utilisée pour spécifier comment la valeur d'un objet généré automatiquement La colonne doit être générée. Pour MySQL, les colonnes à incrémentation automatique sont généralement mappées avec la stratégie GenerationType.IDENTITY. Cependant, si le SQL généré inclut le champ d'auto-incrémentation, il peut y avoir une incompatibilité de configuration.

Dans le cas donné, l'objet Opérateur possède le champ d'auto-incrémentation suivant :

@Id
@GeneratedValue
private Long id;

Cette annotation devrait générer le SQL suivant :

insert 
into
    Operator
    (active, password, username) 
values
    (?, ?, ?)

Cependant, le journal fourni montre que le SQL inclut l'identifiant column :

Hibernate: insert into Operator (active, password, username, id) values (?, ?, ?, ?)

Pour résoudre ce problème, assurez-vous que les étapes suivantes sont suivies :

  1. Spécifiez un dialecte MySQL : Dans la configuration Hibernate, spécifiez un Dialecte MySQL, tel que MySQL5InnoDBDialect ou MySQL5Dialect.
  2. Vérifiez le tableau Définition : Vérifiez que la table en question a une colonne d'auto-incrémentation définie, comme dans le DDL fourni :
CREATE TABLE `operator` ( 
`id` INT(10) NOT NULL AUTO_INCREMENT,
...
  1. Revoyez le code : Vérifiez à nouveau l'entité Operator et assurez-vous qu'elle est correctement annotée avec @GeneratedValue.
  2. Clean Build et Débogage : Effectuez une compilation propre et vérifiez le répertoire de compilation pour déceler toute anomalie. De plus, inspectez les journaux pour détecter toute activité suspecte.

Si le problème persiste, il peut être nécessaire de spécifier explicitement la stratégie de génération d'identité :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn