Caros, imaginem que crio um banco de dados para uma aplicação Java utilizando o Hibernate para persistencia. Este banco foi inicalmente concebido no Postgresql. Em uma das tabelas, há um campo do tipo Boolean.
Posteriormente, utilizando uma facilidade do próprio Hibernate, desejo passar a utilizar o banco Firebird. Lembrando que o mesmo não possui campos do tipo Boolean, como devo proceder para solucionar esta questão, uma vez que os mapeamentos e classes foram criadas utilizando este campo como sendo Boolean?
o Firebird não tem campos boolean???
:shock:
Simples,
nos atributos booleanos na entidade sete o Type com a anotação:
@org.hibernate.annotations.Type(type = "br.com.seupacote. SimNaoBooleanType")
private Boolean ativo;
e crie a classe:
package br.com.seupacote;
import org.hibernate.type.CharBooleanType;
@SuppressWarnings("serial")
public class SimNaoBooleanType extends CharBooleanType {
@Override
protected String getTrueString() {
return "S";
}
@Override
protected String getFalseString() {
return "N";
}
@Override
public String getName() {
return "sim_nao";
}
}
Com isto agora no seu campo ele vai armazenar S ou N para valores true ou false e o Hibernate vai fazer a conversão automaticamente.
Isto é necessário visto que nem todos os bancos tem suporte a tipos booleanos, então o que é feito é criar um campo com valor Varchar de tamanho 1.
Blz.
Eu deixo isso para o Hibernate e o banco decidir. No MySQL por exemplo o Hibernate cria um campo byte(1) para mapear boolean. Já no pgsql ele cria um campo boolean de verdade, e no Oracle cria um number(1) usando 0 = false 1= true.
Internamente nenhum banco de dados tem. O pgsql por exemplo tem o tipo boolean, porém internamente ele grava como 0 ou 1. Já no Oracle o MySQL esses tipos nem existem, você tem que usar 0 ou 1; ou então as gambiarras como o pessoal costuma fazer de usar char(1) com S ou N :roll: