Как реализовать методы equals() и hashcode() в BaseEntity JPA?
У меня есть 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
а также 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;
}
}
Но instanceof
оператору нужен класс, а не объект класса; то есть:
if(other instanceof BaseEntity)
это будет работать как BaseEntity classType здесь
if(other instanceof this.getClass)
это не будет работать, потому что
this.getClass()
возвращает объект классаthis
объект
1 ответ
Решение
Ты можешь сделать
if (this.getClass().isInstance(other)) {
// code
}