Как обновить элемент в весенней загрузке, используя метод сохранения? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть два класса, которые имеют следующие элементы:

@Document(collection = "ClassP")
Class P{
@Id
private String p_id;
}

 @Document(collection = "ClassR")
Class R{
@Id
private String r_id;
private String item;

@DBRef
private P p;

@DBRef
private User user;
}

Вот мой PR-репозиторий:

public interface PMongoRepository extends CrudRepository<P, String>{

P findPById(String p_id);
}

Что я собираюсь сделать, это обновить item из класс R. Я получаю измененный предмет из внешнего интерфейса, и в контроллере у меня есть новый предмет. Таким образом, нет проблем со стороны переднего конца. В моем контроллере у меня есть следующий код:

@RequestMapping(value = "/editData", method = RequestMethod.POST, consumes = "application/json")
    public ModelAndView editData(@RequestBody Map<String, String> new_items) {

        ModelAndView modelAndView = new ModelAndView();

        R copyOfExistingR= new R();

        P pFound = pRepository.findPById(new_items.get("p_id"));
            copyOfExistingR.setP(pFound);
            copyOfExistingR.setItem(new_items.get("sep"));
            copyOfExistingR.setUser(user);
            rRepository.save(copyOfExistingR);

return modelAndView ;
}

Но код работает не так, как ожидалось. На rRepository.save(copyOfExistingR); я получаю следующую ошибку:

Cannot create a reference to an object with a NULL id.

pFound не равен нулю, и я могу распечатать его, но я не знаю, что я делаю неправильно с обновлением класса R , Буду благодарен, если кто-нибудь сможет мне помочь.

Ответы [ 3 ]

0 голосов
/ 05 апреля 2020

Решение состоит в том, что вы просто устанавливаете 'r_id'

@RequestMapping(value = "/editData", method = RequestMethod.POST, consumes = "application/json")
        public ModelAndView editData(@RequestBody Map<String, String> new_items) {

            ModelAndView modelAndView = new ModelAndView();

            R copyOfExistingR = new R();

          //-----Here you set your r_id for object copyOfExistingR----

            P pFound = pRepository.findPById(new_items.get("p_id"));
                copyOfExistingR.setP(pFound);
                copyOfExistingR.setItem(new_items.get("sep"));
                copyOfExistingR.setUser(user);
                rRepository.save(copyOfExistingR);

    return modelAndView ;
    }
0 голосов
/ 07 апреля 2020

Проблема заключалась в том, что я определил переменную выше @Id в классе P, и это было проблематично c. @Id всегда должен быть первым элементом в классе.

0 голосов
/ 05 апреля 2020

Вы никогда не устанавливаете идентификатор copyOfExistingR.

...