[RESOLVIDO]Não persiste String dizendo que o campo é um int

Tenho o seguinte enum


public enum Status {
	
	ABERTO("aberto"), 
	TRATAMENTO("tratamento"),
	CANCELADO("cancelado"),
	FINALIZADO("finalizado");
	
	private String status;
	

	private Status(String status){
		this.status = status;
	}
	
	public String getStatus(){
		return this.status;
	}

}

e a seguinte classe

......
@Enumerated(EnumType.STRING)
	@Column(name = "status", nullable = false, columnDefinition="varchar(20)")
	private Status status;

Quando utilizo este comando;

Solicitacao solicitacao = new Solicitacao();
solicitacao.setStatus(Status.ABERTO);

O hibernate traz o seguinte erro, mesmo eu informando no campo status que ele é EnumType.STRING

Erro:

2281 [http-bio-8080-exec-5] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1366, SQLState: HY000
2281 [http-bio-8080-exec-5] ERROR org.hibernate.util.JDBCExceptionReporter - Incorrect integer value: 'ABERTO' for column 'status' at row 1

Alguém sabe o que é?

Mais ai vc está passando um valor para o ENUM…

Da uma olhada melhor no ERRO:

Você tem que setar um valor inteiro a ele… não string

Arrume sua classe para:

[code]
public enum Status {

ABERTO(1), 
TRATAMENTO(2),
CANCELADO(3),
FINALIZADO(4);


private int status;

private Status(int status){
	this.status = status;
}

public int getStatus(){
	return this.status;
}

}[/code]
e quando for executar faça da seguinte maneira:

Tenta o seguinte em vez de usar columnDefinition=“varchar(20)” tenta colocar o length = 20, vê ai depois passa o feedback

mayroncachina, porem eu quero que no banco fique o valor “aberto” e nao o inteiro 0, 1, 2, etc…

Humm, então verifica direitinho seu banco… Por que você está colocando uma String em um campo inteiro…

Mas basicamente estou obrigando a ser string pq estoum mapeando lá na classe como enum.STRING.
:shock:

Mas na BD tens definido como int. Tens de alterar na BD!

Resolvido. Apaguei a tabela no banco e deixei o hibernate criar de novo com as configurações definidas na classe! :stuck_out_tongue: