나는 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
'MySql' 카테고리의 다른 글
MySQL SQLSTATE [HY000] [1045] 사용자 'root'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : NO). DB_HOST가 localhost로 설정 됨 (0) | 2020.10.09 |
---|---|
MySQL 서버를 통해 MySQL 데이터베이스에 연결 (0) | 2020.10.09 |
MySQL : 필드 별 정렬, 끝에 빈 셀 배치 (0) | 2020.10.09 |
MySQL 텍스트에서 \ n \ r을 제거하는 SQL 쿼리는 무엇입니까? (0) | 2020.10.09 |
MySQL-Python을 사용하는 다른 서버의 데이터베이스 간 조인? (0) | 2020.10.09 |
댓글