Как реализовать методы equals () и hashcode () в BaseEntity JPA? - PullRequest
5 голосов
/ 30 июня 2010

У меня есть класс 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 и versionBaseEntity.

Каков наилучший способ реализации методов 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 object

1 Ответ

2 голосов
/ 30 июня 2010

Вы можете сделать

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