簡體   English   中英

更新對象Spring休眠

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM