Se você está manipulando elementos numa coleção persistente (PersistentSet) do hibernate, por via das dúvidas, sobrescreva os métodos equals() e hashCode(). Por quê? Veja isso:
A implementação automática dos métodos equals() e hashCode() do Eclipse é falha, não realiza encapsulamento, e no caso do Timestamp e do Date, realiza justamente a comparação falha que é descrita no artigo acima. Então, o melhor a fazer seria usar o compareTo() dentro do equals(), e no caso do hashCode(), fazer algo parecido com isso:
public int hashCode() {
final int prime = 31;
int result = 1;
if (getDataHoraFim() != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(getDataHoraFim());
result = prime * result
+ calendar.get(Calendar.YEAR);
result = prime * result
+ calendar.get(Calendar.MONTH);
result = prime * result
+ calendar.get(Calendar.DATE);
result = prime * result
+ calendar.get(Calendar.HOUR_OF_DAY);
result = prime * result
+ calendar.get(Calendar.MINUTE);
}
...
}
note que esta implementação é totalmente diferente da implementação de hashCode() do java, que é algo parecido com:
((int) getDataFim().getTime()) ^ ((int) (getDataFim().getTime() >>> 32))