Problema com tipo de dados no Hibernate

9 respostas
ThiagoWorldCoder

Boa tarde, no meu banco tem várias colunas do tipo varchar, então no meu mapeamento, eu estou usando string. Desta maneira funciona muito bem, porém, existe um tipo de dados char, eu tentei usar string no mapeamento, character, e nada deu certo!

Vocês sabem que tipo eu tenho que colocar no meu mapeamento xml? E também que tipo eu colocaria na classe?

Grato!

9 Respostas

psandrelli

Eu acho melhor usar String, pra evitar esse tipo de erro.
Mesmo quando preciso usar valores “S” ou “N”.
Nesse caso seria varchar(1).

Giulliano

Tipo char não serviu ??? Uma String normalmente aceita um Char já que String são Arrays de caracteres criados para facilitar a nossa vida.

ThiagoWorldCoder

Detalhe pessoal, eu não tenho autorização pra mudar o tipo do banco e ele já está povoado!!

ddduran

Tem que ser String mesmo, o erro pode estar em outra coisa.
Char (do banco) geralmente nos não usamos o char (do java) por que eu posso ter um campo do tipo Char(5) (com 5 caracteres) e char em java seria apenas um caracter.

Eu recomendo você tentar usar o Hibernate Tool apenas para essa tabela e ver como ele faz o mapeamento.

ThiagoWorldCoder

Valeu pela ajuda, deve ser problema em outra coisa mesmo obrigado!

acdesouza

Você irá precisar de um tipo específico de tipo Boolean, para o Hibernate. Então, poderá declarar o seu atributo como sendo boolean e mapeá-lo usando esta implementação.

Declarar a existência do seu tipo, no hbm:

<hibernate-mapping>
	<typedef class="seuprojeto.model.dao.hibernate.SimNaoType" name="sim_nao"/>
...

Usar o seu tipo declarado em um atributo:

<property name="nomeAtributoNaClasse" type="sim_nao" column="NOME_COLUNA_NO_BANCO" />

Código para a criação do seu boolean que será gravado como Char:

package seuprojeto.model.dao.hibernate;

import org.hibernate.type.CharBooleanType;

public class SimNaoType extends CharBooleanType {
	private static final long serialVersionUID = 1L;

	/**
	 * @see org.hibernate.type.CharBooleanType#getTrueString()
	 */
	@Override
	protected String getTrueString() {
		return "S";
	}

	/**
	 * @see org.hibernate.type.CharBooleanType#getFalseString()
	 */
	@Override
	protected String getFalseString() {
		return "N";
	}
	
	/**
	 * @see org.hibernate.type.Type#getName()
	 */
	@Override
	public String getName() {
        return "sim_nao";
    }

}
ThiagoWorldCoder

CONSEGUI GALERA !!!

<key-property name="codigo" type="string">
<column name="SE14_PRODUTO" sql-type="varchar" />
</key-property>

consegui resolver especificando pelo sql-type para transformar o char em varchar!!

viniciuspadua

estou com um problema semelhante.
entretanto chamo uma stored Procedure, e como os campos estão como char(*) e ao receber pelo hibernate todos vem com apenas um único caractere.
Obs> Não posso alterar o tipo dos dados da stored procedure.

rafael.dias

acdesouza, era justamente isto que eu estava procurando rsrs vlw :smiley:

Criado 9 de janeiro de 2008
Ultima resposta 25 de out. de 2011
Respostas 9
Participantes 7