我正在從excel文件執行批量上傳。我想爲新產品創建插入並更新現有的產品,stockId是存在於文件中的唯一密鑰,主鍵是stoneId並且不存在於文件中。插入按預期工作,但我在更新時遇到困難。據我所知,我們不能直接合並hibernate中的瞬態對象,我想知道實現這一點的最佳方法。如何將瞬態bean複製到休眠狀態
我曾嘗試以下選項至今: 1)使用Apache公地的BeanUtils:
Stone s = getStoneByStockNo(t.getStockNo());
Integer id = s.getStoneId();
try {
BeanUtils.copyProperties(s, t);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s.setStoneId(id);
entityManager.merge(s);
這讓我複製了鑰匙進入 'XXXXXXXXX'(stockNo)
2)我已經試過春天BeanUtils的:
Stone s = getStoneByStockNo(t.getStockNo());
String [] ignore = {"stoneId"};
BeanUtils.copyProperties(s, t, ignore);
entityManager.merge(s);
這DONOT給我任何錯誤,但由於某些原因的BeanUtils沒有複製性,我沒有得到任何更新VA梅毒。
3)我想手動設置使用的setter值:
Stone s = getStoneByStockNo(t.getStockNo());
s.setSize(t.getSize());
s.setPurity(t.getPurity());
s.setLab(t.getLab());
entityManager.merge(s);
這是工作的預期,但我DONOT喜歡這種方式,因爲我有大量的屬性,將有充分的時間來修改代碼當他們的屬性發生任何變化時
可能是我錯過了這裏的東西。任何人都可以提出一個更好的方法來實現這一目標?
好吧,那是我的不好!謝謝你糾正我。 – Harsh
對於任何面臨類似問題的人來說,這個問題對我非常有幫助:https://stackoverflow.com/questions/29297468/copy-properties-from-one-bean-to-another-not-the-same-class-recursively -inclu – Harsh