"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > MySQL에서 다형성 추상 슈퍼클래스와 함께 @GeneratedValue GenerationType.TABLE을 사용할 때 "'where 절'의 알 수 없는 열 'sequence_name'" 오류를 해결하는 방법은 무엇입니까?

MySQL에서 다형성 추상 슈퍼클래스와 함께 @GeneratedValue GenerationType.TABLE을 사용할 때 "'where 절'의 알 수 없는 열 'sequence_name'" 오류를 해결하는 방법은 무엇입니까?

2024년 11월 17일에 게시됨
검색:190

How to Resolve

@GeneratedValue MySQL을 통한 다형성 추상 슈퍼클래스

Hibernate와 MySQL을 활용하는 Spring MVC 애플리케이션에서 추상 슈퍼클래스인 BaseEntity의 하위 클래스를 유지하려고 시도하는 것이 관찰되었습니다. , "테이블 'docbd.hibernate_sequences'가 존재하지 않습니다." 오류가 발생합니다. 이 오류는 @GeneratedValue에 GenerationType.TABLE을 사용하고 MySQL 내에서 시퀀스 지원이 부족하여 발생합니다.

엔티티 ID를 관리하는 추상 슈퍼클래스로 인해 GenerationType.IDENTITY를 사용할 수 없으므로 GenerationType.SEQUENCE는 다음과 같습니다. 지원되지 않는 경우 이 문제를 해결하는 방법에 대한 질문이 필요합니다. 제공된 코드 조각은 DAO(데이터 액세스 개체) 내의 추상 슈퍼클래스(BaseEntity), 예제 하위 클래스(CCD), 도메인 특정 언어(DDL) 및 JPQL 코드를 보여줍니다.

사용된 상속 전략은 InheritanceType입니다. .TABLE_PER_CLASS - 각 하위 클래스에 대한 별도의 테이블을 나타냅니다. MySQL이 시퀀스를 사용할 수 없다는 점을 감안할 때 GenerationType.TABLE을 사용하는 대안은 필연적으로 hibernate_sequences 테이블이 없게 됩니다.

포스터는 @MappedSuperClass를 사용하는 것이 실행 가능한 옵션이 아니라고 주장하며 상호 교환 가능한 ManyToOne 관계의 필요성을 언급합니다. . 예를 들어 AccessLog에는 actor_entity와 target_entity가 포함되어 있으며 둘 다 BaseEntity에서 상속됩니다. 이 시나리오에서 @MappedSuperClass를 사용하면 AccessLog가 BaseEntity를 찾을 수 없다는 오류가 발생합니다.

문제를 해결하기 위해 제안된 대로 hibernate_sequences 테이블이 생성되었습니다. 그러나 새로운 오류가 나타났습니다: "'where 절'의 알 수 없는 열 'sequence_name'." 이 오류는 Hibernate에 의해 시작된 SQL 쿼리를 가리킵니다: "업데이트를 위해 시퀀스_name = 'BaseEntity'인 hibernate_sequences에서 시퀀스_next_hi_value를 선택하십시오."

이 특정 오류를 해결하려면 포스터에서 hibernate_sequences 내 누락된 'sequence_name' 열을 해결하는 데 도움이 필요합니다. 테이블.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3