Я работаю с spring-boot-starter-data-jpa
.Должен ли я использовать аннотацию @GeneratedValue
для моего идентификатора сущности, если мой код работает без него, и автоматически генерировать PRIMARY KEY в mysqldb?
При запуске теста в sqltable появляется новая строка с идентификатором со следующим значением AUTO_INCREMENT, в то время как каждый раз передается идентификатор 0.
Сущность
@Data
@Entity
@RequiredArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE, force = true)
public class Person {
@Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)// use or not - the same effect
private int id;
@NonNull
private String name;
@NonNull
private String surname;
}
Репозиторий
public interface PersonRepository extends CrudRepository<Person, Integer> {
Person findByNameAndSurname(String name, String surname);
}
Тестирование
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringRestInventoryPersistenceTests {
@Autowired
private PersonRepository personRepository;
@Test
public void personPersist() {
Person person = new Person("John", "Smith");
assertTrue(person.getId() == 0);
personRepository.save(person);
assertTrue(person.getId() == 0);
Person person2 = personRepository.findByNameAndSurname("John", "Smith");
assertEquals(person.getName(), person2.getName());
}//test passed
Таблица MySql
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`surname` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8