자동 증가하는 id 열이있는 테이블과 getter가 @GeneratedValue(strategy = GenerationType.AUTO)
으로 주석 된 Java 개체가 있습니다. 이것은 저장할 때 훌륭하게 작동하지만 단위 테스트의 경우 ID를 지정하여 결정적으로 지정하려고합니다. MySQL (우리가 사용하는 DB)에서 insert 문에 값을 지정할 수 있으며 모든 것이 잘 작동합니다. 그러나 Java 객체에서 id 필드를 설정하고 지속 시키려고하면 최대 절전 모드에서 예외가 발생합니다. Hibernate로 하여금 일반적으로 생성 된 값에 대한 값을 지정할 수 있도록 허용하려면 어떻게해야합니까?Java/Hibernate : autoincrement/@GeneratedValue를 사용하여 열의 특정 값을 삽입하는 방법
필드 예 : MySQL은
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return this.id;
}
작품 :
INSERT INTO myTable (id, str)
VALUES (10,'this works!')
가 작동하지 않습니다 :
MyObject myObject = new MyObject();
myObject.setId(10L); //remove this line and hibernate saves ok
myObject.setStr("this does not work.");
daoForMyObject.persist(myObject); //throws org.springframework.dao.DataIntegrityViolationException
감사를 사전에 나에게 좋은 테스트 주도 개발 될 도와!
실제로 이것은 내가 게시 한 후에 테스트에서 시작하는 방법입니다 .-P 그러나 자동 증가 필드의 값을 명시 적으로 설정하는 방법은 여전히 궁금합니다. MySQL은 당신이 할 수있게 해준다. 만약 hibernate가 MySQL과 동일한 동작을한다면 좋을 것이다 - 제공되지 않으면 자동 값을 사용한다. 그렇지 않으면 제공된 값을 사용한다. 그것이 버그라고 생각하지 마십시오. – Zugwalt