Conversão de tipo boolean - JPA + MySQL

Caros:

Tenho um campo boolean anotado na minha classe:

    @Column(name="EmpresaCorr", nullable=false)
    private boolean empresaCorr;

Porém, no MySQL, meu campo é do tipo

`EmpresaCorr` int(1) NOT NULL default '0'

Que eu preencho com 0 para false, e -1 para true.

No hibernate, eu gerava uma classe extendendo CharBooleanType e modificando o formato dos valores - mas como fazer isso no JPA puro?

Pelo que eu saiba, não existe nenhum conversor padrão no JPA.

Para conseguir resolver isso só fazendo essa POG que você fez ou criando um campo transient na sua classe entidade e nos get e set vc verifica o valor do campo transient e seta no campo boolean.

Espero ter ajudado!

[quote=Kanin Dragon]Pelo que eu saiba, não existe nenhum conversor padrão no JPA.

Para conseguir resolver isso só fazendo essa POG que você fez ou criando um campo transient na sua classe entidade e nos get e set vc verifica o valor do campo transient e seta no campo boolean.

Espero ter ajudado![/quote]

Bom, na verdade, seria uma possibilidade - dê uma olhada na alteração que eu fiz:

    @Column(name="empresaCorr", nullable=false)
    private int empresaCorr;

Meu get e set:

    public Boolean getEmpresaCorr() {
        if (this == null) {
            return Boolean.FALSE;
        } else {
            return this.empresaCorr == -1 ? Boolean.TRUE : Boolean.FALSE;
        }
    }

    public void setEmpresaCorr(Boolean empresaCorr) {
        if (empresaCorr == null) {
            this.empresaCorr = 0;
        } else {
            this.empresaCorr = empresaCorr == true ? -1 : 0;
        }
    }

Isso deveria funcionar, correto? Porém, me deparei com um outro problema. Meu campo é do tipo INT(1), como já mencionei, e com valor 0 para representar false e -1 para true.

Mas, quando eu jogo ele via JPA, o conteúdo sempre está retornando 0 - false.

Inclusive se eu mudar o valor do campo para “123”, o JPA irá me exibir FALSE no retorno… Se eu colocar no banco de dados “123” no campo, e executar:

public Boolean getEmpresaCorr() {
    System.out.println("Valor do campo: " + this.empresaCorr;

O conteúdo impresso é:“Valor do campo: 0”

Existe algum problema no meu mapeamento do JPA para o MySQL?

Pelo que entendo, em JPA os atributos nao podem ser do tipo primitivo.

Entao substitua o seu int por Integer, boolean por Boolean, etc…

Mas nao sei se isso resolvera esse problema em especifico.