Spring JPA with Hibernate:如何验证对象是否已保存?

时间:2018-02-25 13:31:51

标签: java spring hibernate jpa save

如何验证在UserRepository对象中使用UserService对象(使用@Repository(" userRepository")注释)之后的UserService对象,该对象确实是保存,没有问题。

几乎所有教程都倾向于忽略这种情况,并使服务类中的save(用户用户)方法无效。

3 个答案:

答案 0 :(得分:2)

您可以使用H2内存数据库为此创建集成测试

代码将是这样的:

@RunWith(SpringRunner.class)
@SpringBootTest
class UserInsertTest {

    @AutoWired
    private UserService userService;

    @AutoWired
    private UserRepository userRepository;

    @Test
    public void insert() {
        UserEntity user = userService.save(new UserEntity());
        assertNotNull(userRepository.findOne(user.getId());
    }

}

答案 1 :(得分:1)

我是如何创建一个只包含布尔值的包装类。

parseSaveUserResponse(userDao.save(user))

private SaveUserResponse parseSaveUserResponse(final User user) {
        return new SaveUserResponse(user != null);
  }

这里我创建了一个包装类,如果保存成功,它的字段将为true。如果我们公开api,这是一个很好的做法。

答案 2 :(得分:0)

这个怎么样?

@Service
public class RepositoryWrapper {

    public <T, ID> boolean save(JpaRepository<T, ID> jpaRepository, T t, Function<T, ID> getIdFunc) {
        jpaRepository.save(t);
        return jpaRepository.existsById(getIdFunc.apply(t));
    }

    public <T, ID> boolean delete(JpaRepository<T, ID> jpaRepository, ID id) {
        jpaRepository.deleteById(id);
        return !jpaRepository.existsById(id);
    }

}  

并使用。

@RestController
public class MyController {

    @Autowired
    private UserRepository userRepository;
    @Autowired
    private RepositoryWrapper repositoryWrapper;

    @PostMapping("/my")
    public ResponseEntity<?> save(User user) {
        // Check parameter...

        if(repsitoryWrapper.save(userRepository, user, _user -> _user.getId())) {
            // Success
        }
        else {
            // Fail
        }
    }
}