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?
Vraptor tratar valor []
9 Respostas
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?
vc consegue ver qual é o char que fica no banco caso não exista? não tem como transformar em null?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 !!