如何将瞬态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

回到顶部