2013-07-10 22 views
0

我有一個特定的列一類,說Hibernate的同一對象使用不同的值

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

    // Getter Setter of respectives 
} 

現在發生了什麼事我都列一個和列只有Bç的值相同的值更改。所以我做類似下面的東西

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保存該記錄而不是更新嗎?

回答

1

Yes.Try的saveOrUpdate(a)save(a)代替

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

謝謝,我已經upvoted您的解決方案,但是這不會爲我工作,這只是我的代碼consept因爲整個代碼我不能在這裏解釋然而在我的代碼我使用的方法來保存整個集合通過saveOrUpdateAll()和hibernateTemplate類沒有saveAll()方法,那麼我應該怎麼做?我以前曾考慮過這個問題,並且在這裏也提出了有關這個問題的相關信息http://stackoverflow.com/questions/17568898/hibernatetemplate-saveorupdateall。 – commit

2

您沒有上述的實際實體的細節。如果要使用相同的值保存實體,請將標識符屬性設置爲null

從技術文檔 -

saveOrUpdate()方法

  • 如果對象是已經在這個環節執着,什麼也不做
  • 如果這個session中有另外一個對象具有相同的 標識,拋出異常
  • 如果對象沒有標識符屬性,save()它
  • 如果對象的標識符具有分配給新 實例化的對象的值,保存()它
  • 如果對象是由一個或版本化,並且 版本屬性值是分配給一個新 實例化的對象相同的值,保存()它
  • 否則update()這個對象

saveOrUpdateAll()

  • 保存或更新所有GI根據其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); 
} 
+0

我曾嘗試通過設置標識符值爲null,但它不起作用。 – commit

+0

@commit我已添加更多詳細信息,請參閱編輯部分。 –

+0

這將工作,但我不想再setA()和setB()這是我的關注。 – commit

相關問題