Hibernate Set Lazy Collection troca implementação de contains e add

Pessoal, não sei se alguém ja passou por isso. Tenho uma classe persistente onde o metodo equals leva em consideração alguns atributos mas não o
identificador(chave primaria la no banco). Teoricamente se vc passa um objeto com os atributos usados no equals igual a um objeto que já ta no set, a s implementações cuidam para não sobreescrever o objeto que já tá lá, só que a implementação do hibernate sobreescreve!! Vi o fonte e ele leva em consideração a chave primaria do objeto que tá lá, fazendo uma verificação. Alguém ja passou e como resolveu? Eu criei uma lista nova, preenchi e sobreescrevi a que tava lá!. Foi mal pelo post grande.

	@Override
	public boolean equals(Object obj) {
		boolean resultado = false;
		if (this == obj)			
			resultado = true;
		if (obj == null)
			resultado = false;
		if (getClass() != obj.getClass())
			resultado = false;
		final Avaliacao other = (Avaliacao) obj;
		if (colaborador == null) {
			if (other.colaborador != null)
				resultado = false;
		} else if (!colaborador.equals(other.colaborador))
			resultado = false;
		if (projeto == null) {
			if (other.projeto != null)
				resultado = false;
		} else if (!projeto.equals(other.projeto))
			resultado = false;
		if (this.data.getYear() != other.data.getYear())
			resultado = false;		
		return resultado;
	}

Alberto