Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在保存前验证嵌入的文档?_Java_Spring_Mongodb_Spring Data - Fatal编程技术网

Java 如何在保存前验证嵌入的文档?

Java 如何在保存前验证嵌入的文档?,java,spring,mongodb,spring-data,Java,Spring,Mongodb,Spring Data,我有一个基于spring和mongdb的基本SpringRESTAPI系统。 表示两个集合的两个简单模型:用户和书籍 一对多关系:一个用户可以有多本书 我想在创建/更新用户时验证books collection上是否存在相关书籍。这样做的最佳实践应该是什么?春天有解决办法吗 我考虑将书籍作为一个id数组,并在控制器中验证它们,然后如果验证正确,从书籍集合中获取它们并保存它们 然后我认为,用户模型应该有ID数组,而不是books对象 或者也许有更好的方法 用户模型: 用户控制器: 首先,应该使

我有一个基于spring和mongdb的基本SpringRESTAPI系统。 表示两个集合的两个简单模型:用户和书籍

一对多关系:一个用户可以有多本书

我想在创建/更新用户时验证books collection上是否存在相关书籍。这样做的最佳实践应该是什么?春天有解决办法吗

我考虑将书籍作为一个id数组,并在控制器中验证它们,然后如果验证正确,从书籍集合中获取它们并保存它们 然后我认为,用户模型应该有ID数组,而不是books对象 或者也许有更好的方法

用户模型:

用户控制器:


首先,应该使用@DBRef或@Reference作为books属性。 关于验证书籍的最佳实践是使用mongo事件侦听器

@Component
public class BeforeSaveListener extends AbstractMongoEventListener<User> {
  // you can inject the books repository
  @Override
  public void onBeforeSave(BeforeSaveEvent<User> event) {
   // verify the books and throw exception if not valid
  }
}
@RestController
@RequestMapping("/users")
public class UsersController {

    @Autowired
    UserRepository userRepository;

    @GetMapping("/")
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    @PostMapping("/")
    public void createUser(@RequestBody User user) {
        userRepository.save(user);
    }

    @GetMapping("/{id}")
    public Optional<User> getUserById(@PathVariable("id") String id) {
        return userRepository.findById(id);
    }
    @PutMapping("/{id}")
    public void updateUser(@PathVariable("id") String id, @RequestBody User user) {
        user.setId(id);
        userRepository.save(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable("id") String id) {
        userRepository.deleteById(id);
@Component
public class BeforeSaveListener extends AbstractMongoEventListener<User> {
  // you can inject the books repository
  @Override
  public void onBeforeSave(BeforeSaveEvent<User> event) {
   // verify the books and throw exception if not valid
  }
}