gpt4 book ai didi

java - 更新 Spring Hibernate 对象

转载 作者:行者123 更新时间:2023-12-01 09:53:00 28 4
gpt4 key购买 nike

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

关于java - 更新 Spring Hibernate 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37485647/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com