在Hibernate中save()和update()有什么区别



我正在使用jsp/servlet和hibernate开发用户模块。更新用户时,我使用的是添加新用户时使用的相同保存方法。

用户服务

public static User updateUserInstance(HttpServletRequest request) {
String id = request.getParameter("userId");
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String userName = request.getParameter("userName");
String gender = request.getParameter("gender");
String dob = request.getParameter("dob");
String email = request.getParameter("email");
String userType = request.getParameter("userType");
User user = getUser(Integer.parseInt(id));
System.out.println("User is : "+user);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setUserName(userName);
user.setGender(gender);
user.setDob(dob);
user.setEmail(email);
user.setUserType(userType);
return user;
}

用户道

public boolean saveUser(User user) {
try{
SessionFactory factory = HibernateUtility.getSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
return true;
} catch(Exception e) {
System.out.println(e);
return false;
}
}
public boolean updateUser(User user) {
try{
SessionFactory factory = HibernateUtility.getSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
return true;
} catch(Exception e) {
System.out.println(e);
return false;
}
}

所以我的服务是根据 ID 查找用户并更新用户值。之后,我使用了与userDao相同的保存方法,而不是更新该用户,而是创建新用户。所以我创建了一个名为updateUser的新方法。

我试图找出保存和更新之间的区别,发现如果标识符不存在,保存将插入数据库,否则它会抛出错误。虽然在我的情况下,它没有显示任何错误并创建新用户。所以我无法清楚地确定内部保存和更新是如何工作的。

Hibernate中不同的保存方法有什么区别?

我的问题完全不同。我想知道同样的事情,但它清楚地提到在上面的问题中"保存持久化一个实体。如果不存在标识符,将分配一个标识符。如果有人这样做,它本质上是在进行更新。返回生成的实体 ID。我问同样,我的对象仍然具有标识符,它正在创建新对象而不是更新旧对象。

RTFM。

save()

保留给定的瞬态实例,首先分配生成的标识符。(如果使用分配的生成器,则使用标识符属性的当前值。

update()

使用给定分离实例的标识符更新持久实例。如果存在具有相同标识符的持久实例,则会引发异常。

总结:
保存是为了新事物。休眠根据需要分配一个 ID
更新适用于旧事物。休眠按原样使用对象的 id

最新更新