jonatex
#1
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
jonatex
#4
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…
jonatex
#6
Mas basicamente estou obrigando a ser string pq estoum mapeando lá na classe como enum.STRING.
:shock:
pmlm
#7
Mas na BD tens definido como int. Tens de alterar na BD!
jonatex
#8
Resolvido. Apaguei a tabela no banco e deixei o hibernate criar de novo com as configurações definidas na classe! 