gpt4 book ai didi

java - Hibernate 具有不同值的同一对象

转载 作者:行者123 更新时间:2023-12-01 23:43:20 25 4
gpt4 key购买 nike

我有一个包含特定列的类,例如

Class A
{
private String A;
private String B;
private String C;

// Getter Setter of respectives
}

现在发生了什么,我的 A 列和 B 列的值相同,只有 C 列的值发生了变化。所以我做了如下的事情

A a = new A();
a.setA(..);
a.setB(..);

for(i=0;i<length;i++){
a.setC(..);

getHibernateTemplate.saveOrUpdate(a);

// or something like this
// A a1 = new A();
// a1 = a;
// a1. setC(..);
// getHibernateTemplate.saveOrUpdate(a1);

}

我的问题是它不存储记录的长度,它只更新单个记录。

我知道 hibernate 将其作为持久对象访问的原因,即使我更改值并再次保存它也会更新现有记录,并且可以通过每次获取新对象并设置所有值来解决它。但我不想要它,有什么办法告诉hibernate保存该记录而不是更新吗?

最佳答案

您尚未描述实际的实体详细信息。如果要保存具有相同值的实体,请将标识符属性设置为null

来自文档 -

saveOrUpdate()

  • 如果该对象已在此 session 中持久化,则不执行任何操作
  • 如果与 session 关联的另一个对象具有相同的标识符,抛出异常
  • 如果对象没有标识符属性,则 save() 它
  • 如果对象的标识符具有分配给新对象的值实例化对象,save() 它
  • 如果对象由 a 或 进行版本控制,并且version 属性值与分配给新版本的值相同实例化对象,save() 它
  • 否则 update() 对象

saveOrUpdateAll()

  • 根据其 ID(与配置的“未保存值”匹配?)保存或更新所有给定的持久实例。将实例与当前 Hibernate session 关联。

[如果有效,可以尝试为您的其他 query ]

<小时/>

编辑:这是我的疏忽,我没有仔细检查你的代码。您已在 for 循环外部定义了对象 A,因此在每次迭代中都会更新同一对象。尝试下面的代码,可能会有所帮助。

for(i=0;i<length;i++){
A a = new A(); //-- Create new object for each iteration
a.setA(..);
a.setB(..);
a.setC(..);

getHibernateTemplate.saveOrUpdate(a);
}

关于java - Hibernate 具有不同值的同一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17568776/

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