java - 继承类中的相等和哈希码

标签 java jpa

以我的理解,下面的 equal 和 hashcode 实现是安全的,因为派生类中的正确方法将调用(而不是父类),即使我通过父指针调用它也是如此。如果父级被视为抽象类(在 JPA 中使用 - hiberante 基类)。请根据以下示例确认此假设。

@Entity
@Inheritance
class A {
String type;
}

@Entity
class B extends A {
String uniqueName;
.......

@Override
    public boolean equals(Object obj) {
..
}
@Override
    public int hashCode() {
}
}

@Entity
class C extends A {
String uniqueName;
.......
@Override
    public boolean equals(Object obj) {
..
}
@Override
    public int hashCode() {
}
}

class D {
A a;
String name;
}

既然A可以接受B和C的实例,那么在为D写equal/hash方法的时候,上面的实现是不是可以的(只在B&C中,不在A中)。不会有直接实例化 A(new A)的情况。

谢谢。

最佳答案

您是在问是否可以在直接父类(super class)没有实现的派生类中编写 hashcode 和 equals 方法?

如果说类A永远不会直接实例化,为什么不声明A抽象,那就没有问题。

关于java - 继承类中的相等和哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356098/

相关文章:

Java持久化API : Glassfish tries to use derby instead of MySQL?

java - EntityManager 生命周期是否应该针对每个 Servlet 请求?或者更长?

java - EJB 异常 - 尝试使用具有空 session 的间接遍历关系。

java - Spring、Hibernate、JPA - 为什么我不使用实体管理器,为什么 casacdeType.Persist 只能与实体管理器一起使用

java - 由另一个线程在一个线程中设置变量

java - java中3个类之间的通信

java - @ManyToMany with cascade = CascadeType.REMOVE 删除关联和实体

java - Jenkins - 不使用描述符保留插件设置

Java ResourceBundle 性能

java - 更改 Autowired bean 类型会意外更改值吗?