簡體   English   中英

Hibernate的Spring JPA:如何驗證對象已保存?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM