我有一个场景,我正在消费一个事件并将详细信息保存在数据库中。现在存储在数据库中的记录具有 id 字段 autogenerated @GeneratedValue(strategy = GenerationType.IDENTITY)
。
在我的测试用例中,我需要检查数据是否存储在数据库中并且是否符合预期。但我不确定我将如何findById()
处理 SpringBoot Crud/JPA Repository,因为我不知道生成了什么值。
任何帮助,将不胜感激。
我有一个场景,我正在消费一个事件并将详细信息保存在数据库中。现在存储在数据库中的记录具有 id 字段 autogenerated @GeneratedValue(strategy = GenerationType.IDENTITY)
。
在我的测试用例中,我需要检查数据是否存储在数据库中并且是否符合预期。但我不确定我将如何findById()
处理 SpringBoot Crud/JPA Repository,因为我不知道生成了什么值。
任何帮助,将不胜感激。
我认为您正在寻找注释@DirtiesContext
。
它Test annotation
表示ApplicationContext
与测试关联的对象是脏的,因此应该关闭并从上下文缓存中删除。-javadoc _
阅读第 9.3.4 节-此处
检查 -示例如下:
@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 :只需通过 getter 方法从返回类型save
EmployeeDetails employeeDetails = emaployeeService.saveEmployeeDetails(employee);
int temp = employeeDetails.getID()
相关帖子: 这里
从 CrudRepository 接口看一下save方法。Spring 在事务中执行此方法,完成后 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,可以在您的测试中进一步使用。