我有一个 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/