我有一个BaseEntity类,它是应用程序中所有JPA实体的父类(super class)。

@MappedSuperclass
public abstract class BaseEntity implements Serializable {

    private static final long serialVersionUID = -3307436748176180347L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable=false, updatable=false)
    protected long id;


    @Version
    @Column(name="VERSION", nullable=false, updatable=false, unique=false)
    protected long version;
}

每个JPA实体都从BaseEntity扩展而来,并继承idversionBaseEntity属性。

equals()中实现hashCode()BaseEntity方法的最佳方法是什么? BaseEntity的每个子类都将继承equals()hashCode()BaseEntity行为。

我想做这样的事情:
public boolean equals(Object other){
        if (other instanceof this.getClass()){ //this.getClass() gives class object but instanceof operator expect ClassType; so it does not work
            return this.id == ((BaseEntity)other).id;
        } else {
            return false;
        }
    }

但是instanceof运算符需要classtype而不是class对象;那是:
  • if(other instanceof BaseEntity)
    这将作为BaseEntity是classType在这里
  • if(other instanceof this.getClass)
    这将不起作用,因为this.getClass()返回this对象
  • 的类对象

    最佳答案

    你可以做

    if (this.getClass().isInstance(other)) {
      // code
    }
    

    09-12 19:00