0

我有一堂课有特定的栏目,比如说

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);

}

我的问题是它不存储长度的记录数,它只更新那条记录。

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

4

2 回答 2

2

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

从文档 -

保存或更新()

  • 如果对象已在此会话中持久存在,则不执行任何操作
  • 如果与会话关联的另一个对象具有相同的标识符,则抛出异常
  • 如果对象没有标识符属性,则保存()它
  • 如果对象的标识符具有分配给新实例化对象的值,则保存()它
  • 如果对象由 or 版本化,并且版本属性值与分配给新实例化对象的值相同,则 save() 它
  • 否则更新()对象

保存或更新所有()

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

[如果它有效,可以试试这个为您的其他 查询]


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

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);
}
于 2013-07-10T11:16:24.050 回答
1

是的。尝试 save(a) 代替 saveOrUpdate(a)

getHibernateTemplate.save(a);  //each time a new object saves.
于 2013-07-10T10:53:58.283 回答