Hibernate: tipo boolean

5 respostas
cancao

Olá, estou usando um banco que não tem tipos booleanos, então, criei um campo int que será preenchido com 1 para representar true e 0 para representar false. Agora, estou escrevendo as tags XDoclet e fiquei com a duvida num metodo assim:

/** * Metodo que indica se a pessoa decidiu publicar o email ou não. * * @return true caso haja permissão para publicar email e false caso contrario * * @hibernate.property column="PEOPLE_PUBLISH_EMAIL" * insert="true" * not-null="false" * type="value" * update="true" */ public boolean isPublishEmail() { return publishEmail; }
Minha duvida é, como eu preencho o campo “type” e tambem, como o hibernate vai conseguir reconhecer a logica de 1=true e 0=false.

Até.

5 Respostas

ricardolecheta

Vc precisa implementar um UserType. No mapeamento coloque o type como:

type="type.CustomBooleanType"
Na implementação troca-se o que é true para 1 e false para 0.
package type;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.UserType;

public class CustomBooleanType implements UserType {

	public CustomBooleanType() {}

	public int[] sqlTypes() {
		return new int[] { Types.INTEGER };
	}

	public Class returnedClass() {
		return Boolean.class;
	}

	public boolean equals(Object x, Object y) throws HibernateException {
		return (x == y) || (x != null && y != null && (x.equals(y)));
	}

	public Object nullSafeGet(ResultSet inResultSet, String[] names, Object o)
		throws HibernateException, SQLException {
		String val =
			(String) Hibernate.STRING.nullSafeGet(inResultSet, names[0]);
		return new Boolean((val != null && val.equals("1") ? true : false));
	}

	public void nullSafeSet(
		PreparedStatement inPreparedStatement,
		Object o,
		int i)
		throws HibernateException, SQLException {
		boolean bool = false;
		if (o instanceof Boolean) {
			bool = ((Boolean) o).booleanValue();
		}
		String val = bool ? "1" : "0";
		inPreparedStatement.setString(i, val);
	}

	public Object deepCopy(Object o) throws HibernateException {
		if (o == null)
			return null;
		return new Boolean(((Boolean) o).booleanValue());
	}

	public boolean isMutable() {
		return false;
	}
}
lcmetzger

No arquivo de configuração hibernate.properties, localize e mude para algo como:

A partir de então, você pode mapear normalmente suas propriedades boleanas como boolean, nas tags type.

ricardolecheta

boa :smiley:

cancao

Ricardo e Luiz muito obrigado pela ajuda. Eu acabei lendo o topico de Hibernate Types que mostrava como implementar um CustomType, mas esse esquema de confi é bem mais interessante. :wink:

Até.

ivanmc

Tenho dúvidas de como trabalhar com o MySql 4.1 e campos boolean.

O hibernate vai saber trabalhar com o tinyint(1) ou tenho que criar um typecustom ?

No xdoclet como type=“boolean” ?

Quem puder, gradeço !

Criado 28 de abril de 2004
Ultima resposta 14 de mai. de 2005
Respostas 5
Participantes 4