更新对象Spring休眠

斯特拉·马里斯(StellaMaris)

我有两个相同类型的对象。一个来自数据库,第二个来自其他上下文。现在,我想用第二个对象的值更新第一个对象的值。我将休眠用于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());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章