[英]Hibernate and spring data repository, object incomplete after save or update
[英]Update object spring hibernate
我有兩個相同類型的對象。 一個來自數據庫,第二個來自其他上下文。 現在,我想用第二個對象的值更新第一個對象的值。 我將休眠用於ORM。 以下情況的最佳做法是什么
Class A{
int id;
String name;
}
A obj1= session.get(A.class, 1);
A obj2 = differnetContext();
第一種選擇:
obj1.setName(obj2.getName());
session.update(obj1)
第二種選擇:
obj2.setId(obj1.getId());
session.update(obj2)
是否存在一些函數leftmerge(obj1,obj2).exclude("id")
,該函數返回類型A的對象,其中name = world和id = 1可以傳遞給更新過程?
您可以使用@Transactional將事務范圍設置為服務級別方法,然后更新從數據庫獲得的“活動”實體。
例如:
@Transactional
public void editUser(int userId, User editUser) {
User liveUser = getUserDAO().findByPrimaryKey(userId);
liveUser.setNameFirst(editUser.getNameFirst());
liveUser.setNameLast(editUser.getNameLast());
liveUser.setEmail(editUser.getEmail());
}
如果您還希望更新關聯的實體,則可以使用級聯規則。 可以說此類中的用戶具有與地址的OnetoOne關聯。 然后,如果已正確設置CascadeType,則可以使用相同的方法。
擴展示例:
@Entity
@Table(name="user")
public class User implements Serializable {
// user properties
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
public Address getAddress() {
return this.address;
}
}
服務水平方法...
@Transactional
public void editUser(int userId, User editUser) {
User liveUser = getUserDAO().findByPrimaryKey(userId);
liveUser.setNameFirst(editUser.getNameFirst());
liveUser.setNameLast(editUser.getNameLast());
liveUser.setEmail(editUser.getEmail());
liveUser.setAddress(editUser.getAddress());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.