【问题标题】:Hibernate best pratices for fetching entitiesHibernate 获取实体的最佳实践
【发布时间】:2019-01-02 19:42:09
【问题描述】:

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

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

有什么好的做法可以避免此类问题吗?

2)- 从在网络中运行的软件更新实体时,通常两台不同的计算机对相同的实体(数据库中的相同)执行一些不同的操作,但在更新时,一切都会损坏。

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

此类问题也有什么好的做法吗?

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

【问题讨论】:

    标签: java database hibernate sql-update fetch


    【解决方案1】:

    在 1) 上,您不应该在没有预料到更新实体信息时出现并发问题的情况下这样做。

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

    您的问题没有right answer。但如果只想预防问题,Optimistic Lock 似乎是一个不错的解决方案。当两台计算机尝试更新字段时,最后将数量写入数据库的计算机将收到错误,事务将回滚。

    【讨论】:

    • 我最终通过执行原生 HQL 查询而不使用 update() 函数...并在执行更新时刷新(再次获取实体),你怎么看?
    【解决方案2】:

    我最终使用原生 HQL 查询更新实体(对于那些将面临相同问题的人),然后在更新完成时再次获取实体(再次执行选择查询)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多