>데이터 베이스 >MySQL 튜토리얼 >Hibernate와 MySQL을 사용하여 Spring MVC 애플리케이션에서 추상 슈퍼클래스에 대한 ID를 생성하는 방법은 무엇입니까?

Hibernate와 MySQL을 사용하여 Spring MVC 애플리케이션에서 추상 슈퍼클래스에 대한 ID를 생성하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-09 20:34:02313검색

How to Generate IDs for Abstract Superclasses in Spring MVC Applications using Hibernate and MySQL?

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

Hibernate와 MySQL을 사용하는 Spring MVC 애플리케이션에서 추상 슈퍼클래스와 @GeneratedValue로 작업할 때, 데이터베이스의 특정 요구 사항과 제한 사항을 고려하는 것이 중요합니다. 기본적으로 시퀀스를 지원하지 않는 MySQL에서 GenerationType.TABLE을 사용할 때 "테이블 'docbd.hibernate_sequences'가 존재하지 않습니다."라는 오류가 자주 발생합니다.

문제 개요

이 문제는 GenerationType.TABLE에서 시퀀스 값을 저장하기 위해 "hibernate_sequences"라는 테이블이 필요하기 때문에 발생합니다. MySQL에는 이 테이블이 없기 때문에 Hibernate는 이를 생성하려고 시도하여 오류가 발생합니다. 또한 추상 슈퍼클래스에서 ID를 관리할 때는 GenerationType.IDENTITY를 사용할 수 없습니다.

솔루션

GenerationType.TABLE 및 GenerationType.IDENTITY의 제한에도 불구하고 두 가지 문제를 모두 해결하는 솔루션입니다. 시퀀스 테이블이나 AUTO_INCREMENT에 의존하는 대신 엔터티를 저장하기 전에 다음 ID를 수동으로 검색하고 설정하면 문제가 해결됩니다. 이 접근 방식에는 다음 단계가 포함됩니다.

  1. 새 ID를 생성하는 별도의 서비스 메서드를 만듭니다.
  2. 이 메서드 내에서 저장되는 엔터티에 해당하는 테이블에서 최대 ID 값을 검색합니다. .
  3. 미리 정의된 값(예: 동시성 증가를 위해 1 또는 100)만큼 최대 ID를 늘립니다.
  4. 생성된 ID를 반환합니다.
  5. DAO 클래스에서 생성된 ID를 검색하기 위한 사용자 정의 메서드 호출이 포함된 @GeneratedValue 주석.
  6. 생성된 ID를 저장하기 전에 엔터티에 setId() 메서드를 사용하여 설정합니다.

이 접근 방식은 효과적으로 생성된 ID를 생성합니다. 시퀀스나 AUTO_INCREMENT에 의존하지 않고 새 ID를 생성합니다. 이는 더 큰 유연성을 제공하고 MySQL에 존재하지 않는 시퀀스 문제가 해결되도록 보장합니다.

위 내용은 Hibernate와 MySQL을 사용하여 Spring MVC 애플리케이션에서 추상 슈퍼클래스에 대한 ID를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.