gpt4 book ai didi

java - Hibernate 对象标识

转载 作者:行者123 更新时间:2023-12-02 08:37:20 25 4
gpt4 key购买 nike

在Java持久化中使用Hibernate ,gavin 建议我们使用业务键进行相等性比较。业务键不仅可以涉及多个字段比较,而且不能保证“完美”的业务键的语义将来不会改变。我们生活在一个不理想的世界,业务需求和法律经常变化。在这种情况下,我们将在数据库中留下存储有多个业务关键语义的数据。我想把问题分成两部分:

  1. 当我们严格处理持久或分离的对象时。
  2. 当我们处理 transient 对象时。

  3. 如果我们处理持久和分离的对象,我仍然没有看到使用代理键来实现相等和哈希码有任何缺点。如果两个持久对象或分离对象具有相同的主键,则它们相等。这个假设是错误的吗?

  4. 当我们处理 transient 对象时,如果您尝试持久化两个具有相同业务键但剩余属性值不同的 transient 对象,我们可以使用业务键语义来比较对象并使用合并策略。

在读取密集型应用程序中,大多数事务都是读取/更新,此策略应该会产生更好的性能。

最佳答案

对象标识和 Hibernate 的问题与 transient 对象有关:主键何时创建?如果答案是当您写入数据库时​​(使用数据库控制的主键生成,例如 Oracle 序列),那么您就有潜在的问题。

如果主键用作相等性检查的基础并且它是哈希码生成的一部分,那么您将破坏哈希码约定,因为生成主键之前和之后的对象不会相同。

如果可以,只需使用可在对象创建时设置的生成主键(例如 UUID)。这可确保您的哈希代码和相等性检查保持一致。

关于java - Hibernate 对象标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com