Hibernate 对一些事情非常有用。但是一件微不足道的事情却没有引起人们的注意。我想提供一种在“管理面板”中修改数据库条目的方法。更具体地说,我希望有一个能够修改产品、属性、图像、价格等的视图。因此,我通过例如会话加载要修改的产品的编辑视图.get(Product.class, id)。然后我使用它的属性、修改名称、设置价格、加载图像并做任何我想做的事情。但最终用户必须决定是保存更改还是丢弃它们。保存部分很容易 - 在服务层中调用 session.save 事务,但丢弃似乎是一个更难的问题,因为任何后续会话刷新都会将产品中取消的更改传播到数据库。
所以,我的问题是如何建立这样的方案。最好的选择是什么?我个人看到以下解决方案:
- 使用级联调用 session.evict() 或
- 使用一些复制的副本/ DTO 并在保存操作时合并或
- 处理客户端上的所有更改,然后在保存时重新填充休眠实体。