gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:42:27 25 4
gpt4 key购买 nike

我正在使用 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;
}

UserDao

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 的新方法。

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

What are the differences between the different saving methods in Hibernate?

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

最佳答案

RTFM .

保存():

Persist the given transient instance, first assigning a generated identifier. (Or using the current value of the identifier property if the assigned generator is used.)

更新():

Update the persistent instance with the identifier of the given detached instance. If there is a persistent instance with the same identifier, an exception is thrown.

摘要:
节省是为了新事物。 Hibernate根据需要分配一个id
更新是为了旧事。 Hibernate 按原样使用对象的 id

关于java - Hibernate中save()和update()有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48452278/

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