У меня есть таблица со столбцом идентификатора, который автоматически увеличивается, и объект Java с геттером, аннотированным @GeneratedValue(strategy = GenerationType.AUTO)
. Это прекрасно работает при сохранении, однако для модульного теста я хочу указать идентификатор, чтобы он был детерминированным. В MySQL (используемой нами БД) я могу указать значение в операторе вставки, и все работает нормально. Однако, если я установлю поле id в java-объекте и попытаюсь сохранить его, спящий режим выдаст исключение. Как я могу позволить Hibernate указать значение для обычно генерируемого значения?
Пример поля:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return this.id;
}
Работает в MySQL:
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
Заранее спасибо за то, что помогли мне стать хорошим тестировщиком!