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 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