【发布时间】:2020-08-11 07:18:54
【问题描述】:
我正在尝试在 Spring Boot 中编写一个简单的存储库测试。测试代码如下所示:
public class UserRepositoryTest {
private final TestEntityManager entityManager;
private final UserRepository userRepository;
@Autowired
public UserRepositoryTest(TestEntityManager entityManager, UserRepository userRepository) {
this.entityManager = entityManager;
this.userRepository = userRepository;
}
@Test
public void test() {
String firstName = "Frank";
String lastName = "Sample";
String email = "frank@example.com";
String username = "frank@example.com";
String password = "floople";
String passwordConfirm = "floople";
RegisterUserRequest registerUserRequest = new RegisterUserRequest(firstName, lastName, email, username, password, passwordConfirm);
User user = new User(registerUserRequest);
user.setSpinsRemaining(0);
userRepository.save(user);
userRepository.setSpinsRemainingToTen();
User found = userRepository.findByUsername(username);
assertThat(found.getSpinsRemaining()).isEqualTo(10);
}
我期望发生的事情是新的用户对象被持久化到数据库中,数据库中的行被修改为将 spinsRemaining 设置为 10,然后从 H2 中检索现在修改的行并推入一个新变量命名为“找到”。 “found”变量将指向一个用户对象的实例,该对象还剩下十个旋转。
实际发生的是,“found”变量指向与“user”变量完全相同的 User 实例。事实上,如果我在将“用户”变量持久化到 H2 之后修改了“用户”变量的某些属性,则生成的“找到”对象也具有修改后的属性。根据 IntelliJ,“user”和“found”都指向同一个东西。这怎么可能?
【问题讨论】:
标签: spring hibernate testing h2