问题描述
我有一个场景,我正在使用一个事件并将详细信息保存在数据库中。现在,存储在数据库中的记录具有自动生成的 id 字段 @GeneratedValue(strategy = GenerationType.IDENTITY)
。
在我的测试用例中,我需要检查数据是否存储在数据库中并且是否符合预期。
但我不确定我将如何处理 SpringBoot Crud/JPA 存储库的 findById()
,因为我不知道生成了什么值。
任何帮助将不胜感激。
解决方法
我认为您正在寻找注释 @DirtiesContext
.
它是一个 Test annotation
,表示与测试关联的 ApplicationContext
是脏的,因此应该关闭并从上下文缓存中删除。 - {{3} }
阅读第 9.3.4 节 - javadoc
检查 - Here 如下:
@Test
@DirtiesContext
public void save_basic() {
// get a course
Course course = courseJpaRepository.findById(10001L);
assertEquals("JPA ",course.getName());
// update details
course.setName("JPA - Updated");
courseJpaRepository.saveOrUpdate(course);
// check the value
Course course1 = courseJpaRepository.findById(10001L);
assertEquals("JPA - Updated",course1.getName());
}
顺便说一句 - 如何获取 id :只需通过 save
的返回类型的 getter 方法
EmployeeDetails employeeDetails = emaployeeService.saveEmployeeDetails(employee);
int temp = employeeDetails.getID()
相关帖子:Example
,看看 CrudRepository 接口中的 save 方法。 Spring 在 transaction 中执行此方法,完成后 Hibernate 将在返回的实体中生成标识符。
假设您的实体和存储库如下所示:
....
public class SomeEntity {
@Id
@GeneratedValue
private Long id;
private String name;
public SomeEntity(String name){
this.name = name;
}
....
}
public interface SomeRepository extends CrudRepository<SomeEntity,Long> {
}
保存实体后:
SomeEntity someEntity = someRepository.save(new SomeEntity("Some entity"));
someEntity.getId()
将包含可在您的测试中进一步使用的实际记录 ID。