Olá.
Estou salvando meu objeto na base de dados usando hibernate.
esse objeto possui um atributo que é uma string e deve permitir a entrada de um valor com tamanho infinito, para isso utilizei a anotação @Lob.
O problema é quando vou listar esse objeto, ele carrega esse atributo com problema de encoding…
Ele carrega o valor da string assim: “Hip�teses ou suposi��es que s�o consideradas verdadeiras…”; (com uma interogaçao ou quadradinho no lugar dos acentos)
Alguem ja passou por isso ou sabe o que pode estar acontecendo ?
existe alguma outra anotação que permite que eu salve a string com tamanho infinito?
Hoepers, ñ sei que bd vc ta usando, quando eu estou trabalhando com o postresql eu costumo colocar o campo como text e posso mapear apenas como uma string na minha classe java, funciona bem.
[]'s
visola
Em Java, toda String é UTF-8 então tem que ver qual a conversão que está dando problema Usuário (geralmente browser) -> Aplicação ou Aplicação -> Banco de Dados.
Eu estou fazendo isso que você quer, usando LOB para Strings no OpenJPA e funciona perfeitamente. O banco de dados é o H2.
Tive esse problema no começo e era encoding que o browser não estava mandando correto, mas isso no MVC do Spring.
Se você está recebendo os dados do browser, dá uma olhada para ver se está vindo correto.
Também tem que ver qual o encoding do seu banco de dados, porque já vi problemas desse tipo também com o MySql usando um encoding e quando o Java mandava UTF-8, ele não convertia direito e salvava errado no banco.
C_io_Hoepers
Minha base de dados é postgresql, e os dados sao salvos apenas do java para o banco com o hibernate e buscado apenas para o java… as entradas e saidas nao sao no browser. minha base de dados esta com Codificação: UTF8.
utilizo o hibernate 3.6.0 Final.
thiagocg: segui o que vc sugeriu e retirei a anotação @Lob.
entao, quando crio a base apartir do meu sql ele cria os campos como text e funciona tudo perfeito.
mas, quando crio atraves do hibernate ele gera os campos como character varying(255).
entao, eu preciso de alguma maneira de fazer o hibernate criar como text tbm!?? pois preciso manter a compatibilidade do que é criado pelo hibernate e pela sql.
O mais estranho é q quando coloca a lib do hibernate 3.5.0 ele funciona tudo certo.
parece que essa versao 3.6.0 ta com problema no @Lob pois ja tive problema com salvar arquivo utilizando o @Lob tbm.
aparentemento o hibernate 3.6.0 ta salvando os dados @Lob em outra tabela e coloca somente o id na tabela que eu estou usando, onde o 3.5.0 salva na propria tabela o texto.
nao entendi esse novo conceito do hibernante. so sei q isso ta me dando muito trabalho.
não pretendo mudar a versao do hibernate utilizada.
agradeço pela ajuda ai do pessoal, e quem puder me ajudar mais ainda eu agradeço.
thiagocg
Bom dia Hoepers, por padrão quando não se seta o tamanho da propriedade string o hibernate gera com 255, não sei como fazer para definir um tamanha inicial vazio para o hibernate ja criar corretamente o campo no bd, mas sei q vc pode ir no bd e alterar na mão e tirar a restrição de tamanho do campo character varing para ele aceitar qualquer tamanho de string.
Procurei na documentação do postgresql agora e não encontrei um trecho que fala sobre usar o text ou character varing sem restrição de tamanho e ambos teriam a mesma utilização, eu tinha visto isso a mais ou menos um ano atras qd um cliente me pediu para alterar de character varing para text, dai busquei na documentação e passei pra ele ver q ambos teriam caracteristicas iguais, e desde então nesse cliente esta assim e não tive problemas.
[]'s
visola
Você poderia usar o campo columnDefinition da anotação @Column.
Esta propriedade recebe uma String que o hibernate irá utilizar para criar o campo, veja exemplos na API do JEE 5.