"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver o erro "Coluna desconhecida 'sequence_name' em 'where cláusula'" ao usar @GeneratedValue GenerationType.TABLE com uma superclasse abstrata polimórfica no MySQL?

Como resolver o erro "Coluna desconhecida 'sequence_name' em 'where cláusula'" ao usar @GeneratedValue GenerationType.TABLE com uma superclasse abstrata polimórfica no MySQL?

Publicado em 17/11/2024
Navegar:303

How to Resolve

@GeneratedValue Superclasse abstrata polimórfica sobre MySQL

Em um aplicativo Spring MVC utilizando Hibernate e MySQL, foi observado que a tentativa de persistir subclasses de uma superclasse abstrata, BaseEntity , encontra um erro "A tabela 'docbd.hibernate_sequences' não existe". Este erro surge do uso de GenerationType.TABLE para @GeneratedValue e da falta de suporte de sequência no MySQL.

Como o uso de GenerationType.IDENTITY não é viável devido à superclasse abstrata que gerencia IDs de entidade e GenerationType.SEQUENCE é não é suportado, levanta-se a questão de como resolver este problema. Os trechos de código fornecidos ilustram a superclasse abstrata (BaseEntity), uma subclasse de exemplo (CCD), linguagem específica de domínio (DDL) e código JPQL dentro de um objeto de acesso a dados (DAO).

A estratégia de herança empregada é InheritanceType .TABLE_PER_CLASS, indicando tabelas separadas para cada subclasse. Dada a incapacidade do MySQL de usar sequências, a alternativa de usar GenerationType.TABLE inevitavelmente leva à ausência de uma tabela hibernate_sequences.

O autor da postagem afirma que usar @MappedSuperClass não é uma opção viável, citando a necessidade de relacionamentos ManyToOne intercambiáveis . Por exemplo, AccessLog contém um actor_entity e um target_entity, ambos herdados de BaseEntity. Nesse cenário, usar @MappedSuperClass resultaria em um erro indicando que o AccessLog não pode localizar BaseEntity.

Na tentativa de resolver o problema, uma tabela hibernate_sequences foi criada conforme sugerido. No entanto, surgiu um novo erro: "Coluna desconhecida 'sequence_name' em 'where cláusula.'" Este erro aponta para a consulta SQL iniciada pelo Hibernate: "select sequence_next_hi_value from hibernate_sequences where sequence_name = 'BaseEntity' for update."

Para resolver esse erro específico, o autor da postagem precisa de ajuda para resolver a coluna 'sequence_name' ausente na tabela hibernate_sequences.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3