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))