我需要在hibernate中更新实体,比如
class EntityA {
private String name
//one-to-many, orhpan removal = true, bidirectioanl
private List<EntityB> listB;
}
我从REST API接收对象,我需要更新listB中的项目和实体A的名称。
列表中的项目可以更新/删除/添加
从hibernate的角度来看,最佳做法是什么?
答案 0 :(得分:0)
首先,您使用http请求调用的表示资源的格式是什么。
如果您的资源格式是json,那么您将把json对象映射到您的java对象并使用JPA进行管理。
示例 :
假设您的json格式资源包含以下名为user_info.json的用户数据
{
"firstName" : "jack",
"lastName" : "Dawson",
"contacts" : [
{
"cellphone" : "434343",
"address" : "agrabad",
"city" : "ctg"
},
{
"cellphone" : "+88667755",
"address" : "chokbazar",
"city" : "dhk"
}
]
}
您的用户pojo类是:
public class User {
Private String firstName;
Private String lastName;
private Collection<Contact> contacts;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Collection<Contact> getContacts() {
return contacts;
}
public void setContacts(Collection<Contact> contacts) {
this.contacts = contacts;
}
}
有很多json lib,我个人更喜欢Google开发的Gson。 因此,使用Gson可以将json对象映射到java对象。以下关于将json映射到java对象的代码片段:
User user = new Gson().fromJson("user_info_Json_String", User.class)
所以你完成了映射。您只需根据EntityManager操作执行用户对象即可。
注意:用户类状态必须在映射期间匹配json密钥字符串。
如果资源格式是XML,则JAXB是编组和解组的重要功能,例如对象为xml,反之亦然。
更新:要更新联系人到数据库的集合,我们不需要逐个添加元素。 Java Collection有方法调用addAll()。只是使用它。这是一个例子:
Collection<Contacts> jsonUserContacs = user.getContacts();
Collection<Contacts> dbContacts = dbuser.getContacts();
dbContacts.addAll(jsonUserContacs);
多数民众赞成。您无需逐个添加联系人。
希望这种知识转移可以帮助您。谢谢。