使用不同的值来Hibernate相同的对象

时间:2013-07-10 10:52:36

标签: java hibernate

我有一个具有特定列的类,比如说

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保存该记录而不是更新?

2 个答案:

答案 0 :(得分:2)

您尚未描述实际的实体详细信息。如果要使用相同的值保存实体,请将identifier属性设置为null

来自文档 -

<强> saveOrUpdate()方法

  • 如果该对象在此会话中已经持久化,则不执行任何操作
  • 如果与会话关联的其他对象具有相同的对象 标识符,抛出异常
  • 如果对象没有标识符属性,则保存()它
  • 如果对象的标识符具有分配给新的值 实例化对象,save()它
  • 如果对象是由a或者版本控制的,那么 版本属性值是分配给新的相同值 实例化对象,save()它
  • 否则更新()对象

saveOrUpdateAll()

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

[如果有效,可以针对您的其他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);
}

答案 1 :(得分:1)

是。请save(a)而不是saveOrUpdate(a)

getHibernateTemplate.save(a);  //each time a new object saves.