«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как устранить ошибку «Неизвестный столбец «sequence_name» в разделе «where» при использовании @GeneratedValue GenerationType.TABLE с полиморфным абстрактным суперклассом в MySQL?

Как устранить ошибку «Неизвестный столбец «sequence_name» в разделе «where» при использовании @GeneratedValue GenerationType.TABLE с полиморфным абстрактным суперклассом в MySQL?

Опубликовано 17 ноября 2024 г.
Просматривать:871

How to Resolve

@GeneratedValue Полиморфный абстрактный суперкласс над MySQL

В приложении Spring MVC, использующем Hibernate и MySQL, было замечено, что при попытке сохранить подклассы абстрактного суперкласса BaseEntity , обнаруживает ошибку «Таблица 'docbd.hibernate_sequences' не существует». Эта ошибка возникает из-за использования GenerationType.TABLE для @GeneratedValue и отсутствия поддержки последовательности в MySQL.

Поскольку использование GenerationType.IDENTITY нецелесообразно из-за абстрактного суперкласса, управляющего идентификаторами объектов, а GenerationType.SEQUENCE не поддерживается, возникает вопрос, как решить эту проблему. Предоставленные фрагменты кода иллюстрируют абстрактный суперкласс (BaseEntity), пример подкласса (CCD), предметно-ориентированный язык (DDL) и код JPQL в объекте доступа к данным (DAO).

Применяемая стратегия наследования — InheritanceType .TABLE_PER_CLASS, указывающий отдельные таблицы для каждого подкласса. Учитывая неспособность MySQL использовать последовательности, альтернатива использованию GenerationType.TABLE неизбежно приводит к отсутствию таблицы hibernate_sequences.

Плакат утверждает, что использование @MappedSuperClass не является жизнеспособным вариантом, ссылаясь на необходимость взаимозаменяемых отношений ManyToOne. . Например, AccessLog содержит actor_entity и target_entity, оба из которых наследуются от BaseEntity. В этом сценарии использование @MappedSuperClass приведет к ошибке, указывающей, что AccessLog не может найти BaseEntity.

В попытке решить проблему была создана таблица hibernate_sequences, как было предложено. Однако возникла новая ошибка: «Неизвестный столбец «sequence_name» в разделе «where». Эта ошибка указывает на SQL-запрос, инициированный Hibernate: «выберите последовательность_next_hi_value из hibernate_sequences, где последовательность_имя = 'BaseEntity' для обновления».

Чтобы устранить эту конкретную ошибку, автору сообщения требуется помощь в разрешении отсутствующего столбца «sequence_name» в таблице hibernate_sequences.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3