Primeiro commit

O Hibernate não permite dois objetos com o mesmo identificador na sessão. Caso o objeto esteja no estado detached significa que ele já esteve persisted portanto ele só precisaria ser atualizado, caso contrário ele seria um objeto novo então seria salvo. O método merge verficia essa situação automáticamente portanto não preciso realmente fazer o que estava sendo feito nesse código. Então para melhorá-lo, basta utilizar apenas merge.

public void salvar(Contrato contrato) {
		
		session.merge(contrato);
		
	}