休眠实体的最佳实践

时间:2019-01-02 19:42:10

标签: java database hibernate sql-update fetch

1)从休眠状态获取实体时,我总是在获取后关闭会话,并且经常需要获取相同的实体,但是在不同的时间(不同的会话)

然后我需要对获取的实体执行一些操作,并且在更新时遇到一些问题,因为我对不同的实体执行不同的操作(在数据库中完全相同)

有没有好的习惯来避免这种问题?

2)-从网络中运行的软件更新实体时,经常有两台不同的计算机对同一实体(数据库中的同一实体)执行某些不同的操作,但是更新时,所有内容都会被破坏。

例如,让我们考虑一下售后更新产品数量的事实。售后产品的数量应该少于原来的数量,但是一旦2台不同的计算机对预提取的产品进行销售,则它们肯定是数据库中的错误值,因为我正在使用jpa update( )功能。

这样的问题也有很好的习惯吗?

如果太抽象和不清楚,谢谢。

2 个答案:

答案 0 :(得分:0)

在1)上,您不应在没有期望更新实体信息的并发问题的情况下做到这一点。

在2)上,您可以使用两种策略来处理:乐观锁悲观锁。 Hibernate支持both strategies

您的问题没有right answer。但是,如果只想防止问题发生,乐观锁似乎是一个很好的解决方案。当两台计算机尝试更新该字段时,最后一台将数量写入数据库的计算机将收到错误,并且事务将回滚。

答案 1 :(得分:0)

最后,我使用本地HQL查询(对于那些会遇到相同问题的实体)更新实体,然后在更新完成后再次获取实体(再次执行选择查询)。