AbstractPersistable<?> do Spring Data JPA

Esta classe AbstractPersistable do Spring já vem com a notação @MappedSuperclass e fornece o atributo id
com anotações @id e @GeneratedValue(strategy = GenerationType.AUTO) e tbm os métodos get e set do mesmo.

Podemos criar nossas entidades e estender esta classe (AbstractPersistable) que já vem com os métodos equals e hashCode
com base no id.

A minha dúvida é se é seguro em caso de busca de informações, já que esta classe utiliza estes métodos com base apenas no id.

@MappedSuperclass
public abstract class AbstractPersistable<PK extends Serializable> implements Persistable<PK> {

	private static final long serialVersionUID = -5554308939380869754L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private PK id;

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.data.domain.Persistable#getId()
	 */
	public PK getId() {

		return id;
	}

	/**
	 * Sets the id of the entity.
	 * 
	 * @param id the id to set
	 */
	protected void setId(final PK id) {

		this.id = id;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.data.domain.Persistable#isNew()
	 */
	public boolean isNew() {

		return null == getId();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {

		return String.format("Entity of type %s with id: %s", this.getClass().getName(), getId());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {

		if (null == obj) {
			return false;
		}

		if (this == obj) {
			return true;
		}

		if (!getClass().equals(obj.getClass())) {
			return false;
		}

		AbstractPersistable<?> that = (AbstractPersistable<?>) obj;

		return null == this.getId() ? false : this.getId().equals(that.getId());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {

		int hashCode = 17;

		hashCode += null == getId() ? 0 : getId().hashCode() * 31;

		return hashCode;
	}
}

Pois não preciso sobrescrever os métodos HashCode e Equals, pq ela já faz isso…

Se usar somente esta classe que o spring data jpa fornece não da certo, pois as classes que herdarem desta deveram sobrescrever os métodos equals e hashcode para efeito de busca usando collections…

Ao sobrecrever deve-se tirar a palavra reservada super