栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

重写持久实体的hashCode()和equals()方法的正确方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

重写持久实体的hashCode()和equals()方法的正确方法是什么?

鲍尔和金的书《 Java持久性与Hibernate》
建议不要将键字段用于equals和hashCode。他们建议您应该选择对象的业务密钥字段(如果没有人工密钥),然后使用它们来测试相等性。因此,在这种情况下,如果角色名称不是必填字段,则可以找到必要的字段并结合使用。在您发布的代码中,除了id之外,您还拥有角色名,角色名就是我想要的。

以下是第398页的引文:

我们认为,基本上每个实体类都应该具有 一些
业务密钥,即使它包含了该类的所有属性(这对于某些不可变的类也是适当的)。业务密钥是用户唯一标识特定记录的东西,而代理密钥是应用程序和数据库使用的东西。

业务密钥相等性
意味着equals()方法仅比较构成业务密钥的属性。这是避免先前提出的所有问题的理想解决方案。唯一的缺点是,首先需要额外的思想来识别正确的业务密钥。无论如何,都需要付出这种努力。如果您的数据库必须通过约束检查确保数据完整性,则标识任何唯一键非常重要。

我用来构造equals和hashpre方法的一种简单方法是创建一个toString方法,该方法返回“业务键”字段的值,然后在equals()和hashCode()方法中使用它。澄清:这是一种懒惰的方法,适用于我不关心性能的情况(例如,在内部为皱纹的内部webapp中),如果预计性能会成为问题,请自己编写方法或使用IDE的代码生成工具。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号