Привет всем!
Некоторое время назад я столкнулся с проблемой: если метод сохранения хранилища не работает, идентификатор, введенный в компонент Hibernate, остается в компоненте.Такое поведение может привести нас к ситуации, когда мы будем думать о нашем непостоянном компоненте как о постоянном компоненте.Мне было бы приятно узнать, что является обычной практикой, чтобы избежать этой ситуации.
Пример теста (весенняя загрузка + hibernate + база данных oracle):
@Entity
@SequenceGenerator(name = "TEST_ENTITY_GENERATOR", allocationSize = 1, sequenceName = "TEST_ENTITY_SEQ")
public class TestEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TEST_ENTITY_GENERATOR")
private Long id;
@Column(nullable = false)
private String name;
public Long getId() {
return id;
}
}
@Repository
public interface TestEntityRepository extends JpaRepository<TestEntity, Long> {
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class RemainingIdTest {
@Autowired
private TestEntityRepository testEntityRepository;
@Test
public void test() {
TestEntity entity = new TestEntity();
try {
Assertions.assertThat(entity.getId()).isNull();
testEntityRepository.save(entity);
Assertions.fail("Save must fail");
} catch (DataIntegrityViolationException e) {
Assertions.assertThat(entity.getId()).isNotNull();
}
}
}