如何将瞬态bean复制到休眠状态
我正在从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喜欢这种方式,因为我有大量的属性,将有充分的时间来修改代码当他们的属性发生任何变化时
可能是我错过了这里的东西。任何人都可以提出一个更好的方法来实现这一目标?
回答:
在第二种方法中,您尝试合并源目标实体。正如你可以在doc中看到的,它与apache commons BeanUtils相反。
试试这个方法,它将所有值从牛逼复制到小号,并会忽略你在阵列传递的值。
Stone s = getStoneByStockNo(t.getStockNo()); String [] ignore = {"stoneId"};
BeanUtils.copyProperties(t, s, ignore);
entityManager.merge(s);
以上是 如何将瞬态bean复制到休眠状态 的全部内容, 来源链接: utcz.com/qa/257384.html