gpt4 book ai didi

java - 实现 hashCode 和延迟加载

转载 作者:行者123 更新时间:2023-12-01 10:46:30 24 4
gpt4 key购买 nike

这已经被讨论了很多(例如 herethere ),对我来说,在为 Hibernate 实体实现 hashCode 方法时使用“业务”键听起来很有用,例如:

public class User {
private String username;
...
@Override
public int hashCode() {
//Calculate on base of username
}
}

在 ID 由 hibernate 生成的情况下,这比使用 ID 更好(对于新实体,该 ID 将为空)。

如果一个实体仅由“虚拟”延迟加载属性组成怎么办?我可以根据它们计算 hashCode 并且到目前为止已经做到了。现在我遇到了一个问题,当调用 hashCode() 时, session 将关闭,因此无法再访问延迟加载的属性。遇到这种情况该怎么办?

最佳答案

默认情况下,如果我对实体进行代码审查,我会要求程序员使 equals()hashcode() 不依赖于延迟加载特性。感觉就像抽象的失败,让 equals()hashcode() 方法的成功或失败取决于 hibernate 的 session 状态。毕竟,如果其业务键不可用,那么它就不是一个干净的对象,就像主键不可用一样。

我建议急切地获取相关属性。在极少数情况下,您可以使用 @Formula hibernate 注释来获取必要的字段作为派生属性来计算 equalshashcode

关于java - 实现 hashCode 和延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34139890/

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