[英]Spring JPA with Hibernate: How to verify that an object was saved?
例如,如何驗證在UserRepository對象(標有@Repository(“ userRepository”))中名為save(User實體)(CrudRepository實現)的UserService對象方法之后,該對象確實已保存並且沒有問題。
幾乎所有教程都傾向於忽略這種情況,並使服務類中的save(User user)方法無效。
您可以使用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());
}
}
我如何做到的是創建一個僅包含布爾值的包裝器類。
parseSaveUserResponse(userDao.save(user))
private SaveUserResponse parseSaveUserResponse(final User user) {
return new SaveUserResponse(user != null);
}
在這里我創建了一個包裝器類,如果保存成功,它的字段將為true。如果我們公開自己的api,這是一個好習慣。
這個怎么樣?
@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
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.