我有一个BaseEntity类,它是我的应用程序中所有JPA实体的超类.
@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扩展并继承BaseEntity的id和version属性.
在BaseEntity中实现equals()和hashCode()方法的最佳方法是什么? BaseEntity的每个子类都将从BaseEntity继承equals()和hashCode()行为.
我想做这样的事情:
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(其他instanceof BaseEntity)
这将起作用,因为BaseEntity在这里是classType
> if(this.getClass的其他实例)
这不起作用,因为this.getClass()返回此对象的类对象