java - 如何在不更新旧记录的情况下使用 Hibernate session.save() 插入/保存对象

标签 java mysql hibernate jsp jdbc

我有一个 search.jsp 页面,我可以在其中搜索和检索数据库中的记录。我必须复制这条记录并进行修改并保存这两条记录。

例如:

 method1(){
  Response response=new Response();
  //To perform DB search
  response=delegate.requestSearch(//some request criteria);
  Types obj1=(Types) response.getBaseEntity();
  Types obj2=obj1;
  obj2.setPromaryKeyObject(//some unique value);
 }

在我的 DAO 中,保存方法:

session.save(obj1);
session.save(obj2);
transaction.commit(); // transaction

当调试点提交事务时,我只得到一个更新查询。但我希望有两个插入查询。

但这工作正常。这是一次尝试,但这不是我想要做的。

Types tempObj1 = new Types();    
tempObj1.setValue1(obj1.getValue1();
 // all values of the object should be set
session.save(tempObj1);
Types tempObj1 = new Types();    
tempObj2.setValue1(obj2.getValue1();
 // all values of the object should be set
session.save(tempObj2);
transaction.commit(); // transaction

在这种情况下,我触发了两个插入查询。

我很确定错误出在我的 hibernate 方法中,因为我对 Hibernate 还很陌生。当我使用 JDBC 和 MySql 查询时,同样的代码工作正常。

最佳答案

这都是关于 ID 的。如果数据库中存在具有给定 id 的对象,则会更新它。如果没有设置 id 则根据生成策略生成并插入新记录。有时(取决于配置)您必须明确设置 id。

由于您使用 MySQL,我猜您使用 autoincrement 列作为 id 和 IDENTITY 生成策略。您可能需要做的是保留更新记录的 id,并将要插入的新记录的 id 设置为 null

关于java - 如何在不更新旧记录的情况下使用 Hibernate session.save() 插入/保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11899960/

相关文章:

javascript - 如何将 JS 嵌套的 some() 逻辑转换为 Java

java - 如何像文本一样读取excel(.xls)文件?

java - 确定从循环内部调用的递归函数的时间复杂度

php - mysql_real_escape_string() 坏了吗?

MySQL 使用的内存比在 Docker 容器中配置的内存多

java - 注释验证很慢

java - Html 元素未在 Outlook 正文中转换

php - 无法将日期存储在数据库中

java - 用于学习的示例 Hibernate 应用程序

java - 实现 hibernate-CRUD wia 注释时出现 hbm.xml 未找到错误