Boa tarde , tenho na minha tabela do banco de dados , um campo char de uma posição não nula , que quando ela esta vazia ela me retorna um caracter estranho que parece uma caixa [] no jsp . Este campo esta mapeado como String de uma posição no hibernate e ja tentei char tambem e ele continua vindo [] quando o campo está vazio.Alguem sabe como tratar este campo , pois um simples if campo == null ou if campo == " " não identifica?
ele deve estar vindo como 0 (o char zero):
if (campoChar != 0)
ou ainda um ‘0x0’ ou algo do tipo.
Acho que você não entendeu , o campo esta char somente no banco de dados , na minha classe modelo ela esta como String , pois quero usar ENUM para definir os valores.
pq vc não usa uma enum ao invés de string no seu modelo?
o hibernate sabe mapear isso…
em todo caso, “\0” talvez funcionaria
Coloquei o Enum direto no modelo como sugeriu , mas da erro quando o valor é vazio :
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.IllegalArgumentException: Unknown name value for enum class model.common.Confirmacao
Se não me engano o problema deve ser porque o valor é nulo ou vazio , mas como definir um valor padrão para o Enum quando este for vazio ?
Fiz esta big gambiarra :
public String getUsrHab() {
if (usrHab != "S" || usrHab != "N"){
usrHab = "N";
}
return usrHab;
}
Este funcionou!
Tentei fazer tambem :
public Confirmacao getUsrHab() {
if (usrHab != Confirmacao.N || usrHab != Confirmacao.S){
usrHab = Confirmacao.N;
}
return usrHab;
}
Mas usando Enum dá erro antes mesmo de executar o método get!
Favor se alguem tiver uma solução mais elegante , favor me passe !
vc consegue ver qual é o char que fica no banco caso não exista? não tem como transformar em null?
[quote=Lucas Cavalcanti]vc consegue ver qual é o char que fica no banco caso não exista? não tem como transformar em null?[/quote] No banco de dados esta gravado vazio (sem nada no campo).A estrutura do banco de dados não posso alterar , pois é usado num sistema existente em Vb.Só para constar , o banco de dados é o MS Sql Server 2005 .Estou encontrando outras dificuldades por causa desse banco legado , tipo quase todos os campos são Not Null , quase todos os campos textos são char em vez de varchar , e não tem chave estrangeira , alem de ter uma infinidade de colunas para cada tabela !
nesse caso, deixa sem enum mesmo, pelo menos no atributo da entidade (daí vc deixa enum no getter e setter e converte)… daí pelo menos dá pra vc controlar isso.
Obrigado ! Acho que vou empurrando esses problemas para debaixo do tapete , e quando tiver um sistema mais redondo irei tentar mudar a estrutura do banco de dados e a cabeça do patrão !!