我有一个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
延伸,并继承id
的{{1}}和version
属性。
在BaseEntity
中实施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;
}
}
运算符需要classtype而不是class对象;那就是:
instanceof
这将起作用,因为BaseEntity是classType
if(other instanceof BaseEntity)
这不起作用,因为if(other instanceof this.getClass)
返回this.getClass()
对象的类对象
答案 0 :(得分:2)
你可以做到
if (this.getClass().isInstance(other)) {
// code
}