Hibernate não salva as casas decimais de float

Olá pessoal estou usando o hibernate e agora verifiquei que o Hibernate não está salvando as casa decimais dos valores de float.
Alguem saberia dizer o por que?

Posta o código da sua classe

Seria bom você passar o fonte de sua classe e seu mapeamento para vermos como está.

Uma dica, se você utiliza esses valores pra fazer cálculo (soma, subtração, …) é melhor utilizar BigDecimal, já tive um monte de problema com float e double.

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package modelo;

/**
*

  • @author Germano
    */
    public class SalarioMinimo {
    int ano;
    float valor;

    public void setAno(int ano){
    this.ano =ano;
    }
    public void setValor(float valor){
    this.valor = valor;
    }
    public int getAno(){
    return this.ano;
    }
    public float getValor(){
    return this.valor;
    }
    }[/code]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Document   : SalarioMinimo.hbm.xml
    Author     : Germano Rodrigo Paiva de Assis
    E-mail     : germanobioinfo@gmail.com
    Description:
        Purpose of the document follows.
-->
<hibernate-mapping>
  <class name="modelo.SalarioMinimo" table="SalarioMinimo">
    <id column="ano" name="ano">
    </id>
    <property column="valor" name="valor"/>
  </class>
</hibernate-mapping>

olá amigo,

Segundo sua necessidade, recomendo que vc use a classe Wraper BigDecimal pois é a melhor recomendada para valores monatários pois nao é de ponto flutuante e sim ponto fixo sem arredondamentos.

Experimente e poste os resultados

Abraço

[quote=paulo1911]olá amigo,

Segundo sua necessidade, recomendo que vc use a classe Wraper BigDecimal pois é a melhor recomendada para valores monatários pois nao é de ponto flutuante e sim ponto fixo sem arredondamentos.

Experimente e poste os resultados

Abraço[/quote]
Poutz
É que eu tenho outras classes mapeadas que usam também float.
Num saberias me dizer qual a onda que está dando para que a parte decimal não esteja sendo inserida no banco?
Ou vou ter de editar todas as outras classes ? xD

Grato

Tirando a parte que falamos sobre o BigDecimal, parece que está tudo ok no seu código.
Só pra desencargo de consciência, você pode passar qual é o tipo desse campo no banco?
Mais uma coisa, evite usar tipos primitivos, use objetos, afinal você está trabalhando com uma linguagem orientada a objetos. Ao invés de float, use Float.

tente isso

hbm

<property name="balance" type="float"> <column name="balance" sql-type="decimal(12,3)"/> </property>

anotação

veja se a coluna no banco esta definida para trabalhar com casas decimais

[quote=AAAquino]tente isso

hbm

<property name="balance" type="float"> <column name="balance" sql-type="decimal(12,3)"/> </property>

esse hbm é o hbm da classe ou o de configuração?
Se for o da classe, tem algum modo de fazer isso no hibernate.cfg.xml ?

Em comando sql direto eu consegui inserir no banco.
e as colunas float no banco estão tamanho 22 precisão 126 escala -

[quote=germanosk][quote=AAAquino]tente isso

hbm

<property name="balance" type="float"> <column name="balance" sql-type="decimal(12,3)"/> </property>

esse hbm é o hbm da classe ou o de configuração?
Se for o da classe, tem algum modo de fazer isso no hibernate.cfg.xml ?

Em comando sql direto eu consegui inserir no banco.
e as colunas float no banco estão tamanho 22 precisão 126 escala -[/quote]

estes dados vc coloca no SalarioMinimo.hbm.xml

Cara eu coloquei, editei, reditei sempre limpando o projeto
mas nada até agora.
Estou até tentando configurar o log4j para ver como o hibernate está passando isso nos values pq tá cruel :frowning: se alguem puder ajudar ai agradeço muito

Parte do log

Hibernate: insert into JurosTJLP (valor, ano) values (?, ?) 17:59:45,657 DEBUG AbstractBatcher:44 - Executing batch size: 1 17:59:45,659 DEBUG Expectations:53 - success of batch update unknown: 0 17:59:45,659 DEBUG AbstractBatcher:374 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 17:59:45,659 DEBUG JDBCTransaction:103 - commit 17:59:45,660 DEBUG AbstractFlushingEventListener:111 - processing flush-time cascades 17:59:45,660 DEBUG AbstractFlushingEventListener:154 - dirty checking collections 17:59:45,660 DEBUG AbstractFlushingEventListener:85 - Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects 17:59:45,660 DEBUG AbstractFlushingEventListener:91 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections 17:59:45,660 DEBUG Printer:83 - listing entities: 17:59:45,660 DEBUG Printer:90 - modelo.JurosTJLP{valor=4.567, ano=2134}

versao atual do JurosTJLP.hbm.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

[/code] Versao atual do modelo.JurosTJLP.java [code] /* * To change this template, choose Tools | Templates * and open the template in the editor. */

package modelo;

/**
*

  • @author Germano
    */
    public class JurosTJLP {
    int ano;
    Float valor;

    public void setAno(int ano){
    this.ano =ano;
    }
    public void setValor(Float valor){
    this.valor = valor;
    }
    public int getAno(){
    return this.ano;
    }
    public float getValor(){
    return this.valor;
    }
    }
    [/code]

e eu consegui inserir no BD usando a query

insert into jurostjlp (ano,valor) values('2010','123,456')

Eu sinceramente não sei o que fazer para que o hibernate salve corretamente no banco se alguém souber favor ajudar
agradeço desde já

dá um ‘desc’ na sua tabela ‘jurostjlp’ e posta aqui

o create da tabela

CREATE TABLE "JUROSTJLP" ( "ANO" NUMBER(10,0) NOT NULL ENABLE, "VALOR" FLOAT(126), PRIMARY KEY ("ANO") ENABLE ) /
Alguem saberia dizer se é alguma frescura/ configuração do Hibernate com o Oracle que está causando isso.
Já procurei já li mas até agora não consegui resolver

Olá pessoal

Eu editei meu model
de float para Double e o hibernate inseriu sem problemas com as casas depois da virgula e tudinho.
Acho que vou editar todos os models de float para Double.
Por enquanto deve resolver meu problema, mas gostaria de saber se a longo prazo pode dar algum problema.
Grato pelas respostas e pela ajuda abraço a todos :smiley: