英文:
How to update an element in spring boot using save method?
问题
我有两个类,它们具有以下元素:
@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;
}
这是我的PRepository:
public interface PMongoRepository extends CrudRepository<P, String> {
P findPById(String p_id);
}
我要做的是更新类R中的item
。我从前端获取了更改后的项目,在我的控制器中,我有新的项目。因此,前端没有问题。在我的控制器中,我有以下代码:
@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);
处,我收到以下错误消息:
无法创建对具有NULL id的对象的引用。
pFound
不是null,我可以打印它,但是我不知道在更新R类时做错了什么。如果有人能帮助我,我将不胜感激。
英文:
I have two classes which have the following elements:
@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;
}
Here is my PRepository:
public interface PMongoRepository extends CrudRepository<P, String>{
P findPById(String p_id);
}
What I am going to do is to update the item
from class R. I get the changed item from the frontend and in my controller I have the new item. So, there is no problem from the front end side.
In my controller, I have the following code:
@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 ;
}
But the code doesn't work as expected. On the rRepository.save(copyOfExistingR);
I get the following error:
Cannot create a reference to an object with a NULL id.
The pFound
is not null and I can print it out, but I don't know what I am doing wrong with updating the R class. I would be thankful if anybody could help me.
答案1
得分: 0
你从未设置过copyOfExistingR的id。
英文:
You never set id of copyOfExistingR.
答案2
得分: 0
解决方案是你只需要设置 '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();
//-----在这里为对象 copyOfExistingR 设置你的 r_id----
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;
}
英文:
The solution is that you just set the '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 ;
}
答案3
得分: 0
问题是我在 P 类中 @Id 上方定义了一个变量,这是有问题的。@Id 必须始终是类中的第一项。
英文:
The problem was that I had defined a variable above @Id in the P class and it was problematic. The @Id must always be the first item in the class.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论