Bem, o problema é um velho conhecido.
Tenho um tipo booleno ao qual o jpa nao consegue converter para um tipo esperado em uma tabela.
No meu caso tenho uma tabela no oracle com “char(1”) com os valores “S” e “N” para representar um boolean.
Meu problema:
-
eu não gosto de usar anotações, acho que polue muito as classes e as tornam especificas de dominio ao invez de um bom e velho pojo. Logo o meu mapeamento está todo em XML e as minhas classes de dominio são todas pojos simples sem anotações especificas de qualquer solução.
-
Já tentei todas as soluções possiveis e agora estou analizando a possibilidade de resolver remapeando atravez do dialeto do hibernate. Tomei como base a classe abaixo.
public class CustomOracleDialect extends Oracle9iDialect {
public OracleDialect() {
super();
registerColumnType(Types.BIT, "char(1)");
//registerColumnType(Types.BOOLEAN, "char(1)");
}
}
problema, ele até gera um banco da forma esperada colocando o char(1) como tipo da tabela. Coisa que também já era feita antes usando:
<basic name="ativo">
<column name="ativo" length="1" nullable="false" column-definition="char(1)" />
</basic>
ou seja, consegui reproduzir no hibernate oque já poderia fazer no xml.
O que me falta é o jpa fazer a substituicao de TRUE por “S” e FALSE por “N”. Já tentei o isso associado ao:
<property name="hibernate.query.substitutions" value="true 'S', false 'N'" />
bem… até agora nada.
outra solução inviavel no meu caso é fazer uso do toplink neste caso particular.