본문 바로가기
MySql

MySQL auto_increment 기본 키 필드를 존중하지 않는 Hibernate

by 베이스 공부 2020. 10. 9.
반응형

나는 Hibernate가 어떻게 작동하는지 배우려고 노력하고 있으며 거의 ​​받아 들일 수없는 학습 곡선에 직면하고 있습니다. 내 개체에 대한 auto_increment 정책을 존중하도록 Hibernate를 얻는 방법을 볼 수 없습니다. 대신 1부터 시작하는 기존 ID로 데이터베이스의 항목을 덮어 씁니다.

다음과 같이 정의 된 MySQL 테이블로 뒷받침되는 간단한 Foo 객체가 있습니다.

CREATE TABLE `Foo` (
  `fooId` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`fooId`),
)

SQL ( insert into Foo values ​​(); )을 사용하여 여러 Foo 객체를 손으로 삽입하는 것이 올바른 일임을 확인했습니다.

내 Java 클래스에는 다음과 같은 주석을 사용하여 지정된 ID가 있습니다.

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="fooId")
private Integer id;

그런 다음 Foo 개체를 인스턴스화하고 데이터베이스에 저장하는 테스트 코드를 실행합니다 ( session.save (obj) 사용). 하나부터 시작하는 자체 기본 키 시퀀스를 사용하고 테이블의 키 정책을 보지 않는 것 같습니다. 거기에 있던 모든 것을 덮어 씁니다.

@GeneratedValue 비트에 대한 변형을 시도했습니다 (가능한 모든 전략을 사용하고 괄호 절은 제외). 누군가는 GeneratedValue 를 완전히 생략 할 것을 제안하기도했습니다. 아무것도 작동하지 않는 것 같습니다.

내가 뭔가를 빠뜨리고 있습니까? 내가 무엇을 놓치고 있습니까? Hibernate가 정말 이렇게 어렵습니까?

(대체 Java 데이터베이스 지속성 옵션이있는 사람이 있으면 제안 해주세요. 오래 지속되는 mondo 엔지니어링 프로젝트가 아닌 프로토 타입을 만들고 있습니다.)

 

해결 방법

 

GenerationType.IDENTITY 를 원한다고 생각합니다. MySql은 Id 값을 생성하기 위해 테이블이나 시퀀스를 사용하지 않습니다.

 

참조 페이지 https://stackoverflow.com/questions/582526

 

 

반응형

댓글