Maison > Article > base de données > Comment résoudre l'erreur « Colonne inconnue 'sequence_name' dans 'where clause'" lors de l'utilisation de @GeneratedValue GenerationType.TABLE avec une superclasse abstraite polymorphe dans MySQL ?
Dans une application Spring MVC utilisant Hibernate et MySQL, il a été observé que la tentative de persistance des sous-classes d'une superclasse abstraite, BaseEntity , rencontre une erreur « La table 'docbd.hibernate_sequences' n'existe pas ». Cette erreur résulte de l'utilisation de GenerationType.TABLE pour @GeneratedValue et du manque de prise en charge des séquences dans MySQL.
Étant donné que l'utilisation de GenerationType.IDENTITY n'est pas viable en raison de la superclasse abstraite gérant les ID d'entité et que GenerationType.SEQUENCE est n'est pas pris en charge, cela soulève la question de savoir comment résoudre ce problème. Les extraits de code fournis illustrent la superclasse abstraite (BaseEntity), un exemple de sous-classe (CCD), le langage spécifique au domaine (DDL) et le code JPQL dans un objet d'accès aux données (DAO).
La stratégie d'héritage utilisée est InheritanceType. .TABLE_PER_CLASS, indiquant des tables distinctes pour chaque sous-classe. Étant donné l'incapacité de MySQL à utiliser des séquences, l'alternative consistant à utiliser GenerationType.TABLE conduit inévitablement à l'absence de table hibernate_sequences.
L'affiche affirme que l'utilisation de @MappedSuperClass n'est pas une option viable, citant la nécessité de relations ManyToOne interchangeables. . À titre d'exemple, AccessLog contient un acteur_entity et un target_entity, qui héritent tous deux de BaseEntity. Dans ce scénario, l'utilisation de @MappedSuperClass entraînerait une erreur indiquant qu'AccessLog ne peut pas localiser BaseEntity.
Pour tenter de résoudre le problème, une table hibernate_sequences a été créée comme suggéré. Cependant, une nouvelle erreur est apparue : « Colonne inconnue 'sequence_name' dans 'where clause'. » Cette erreur pointe vers la requête SQL initiée par Hibernate : « select séquence_next_hi_value from hibernate_sequences which séquence_name = 'BaseEntity' pour la mise à jour. »
Pour résoudre cette erreur spécifique, l'affiche nécessite de l'aide pour résoudre la colonne 'sequence_name' manquante dans la table hibernate_sequences.
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!