Dinheiro + hibernate

11 respostas
rodpuc

Qual tipo deve ter um atributo de uma entidade minha que representa um valor em dinheiro?

Seria um Double o suficiente?

11 Respostas

x111

rodpuc:
Qual tipo deve ter um atributo de uma entidade minha que representa um valor em dinheiro?

Seria um Double o suficiente?


Não use Double ou qualquer número de ponto flutuante.
Aconselho o uso do padrão Money do Fowler: http://martinfowler.com/eaaCatalog/money.html

rodpuc

ok, mas como eu faria pra usar isso com o hibernate? Afinal de contas não quero que isso seja um relacionamento, mas sim um atributo na tabela.

x111

O você teria uma classe Money que seria um objeto valor da sua entidade!

x111

O você teria uma classe Money que seria um objeto valor da sua entidade!

Ops. Desculpe pela duplicação o Firefox travou aqui e imaginei que não havia sido enviado!

rodpuc

sim, mas todo atributo que não é um tipo primitivo se torna um relacionamento no hibernate (ao invés de um atributo)

x111

Não necessariamente! O objeto valor pode ficar na mesma tabela! De uma pesquisada sobre Object Value no hibernate.

quebrado

Uso o BigDecimal em calculo de milhões e nunca tiver problemas. :slight_smile:

x111

O padrão Money é diferente. É especifico para trabalhar com dinheiro. BigDecimal por exemplo não tem o conceito de moeda, já o padrão Money tem. Ele também coloca outros cálculos especificos como rateio de valores para que não você não perca centavos em divisões.

rodpuc

Eu conheço a utlização e VO’s mas não em entidades do hibernate… pesquisei sobre o tema mas não encontrei nada que ajudasse, vc poderia me indicar algo?

x111

No livro Java Persistence API com Hibernate ele fala sobre isso.
Se, não me engano, no tutorial do JPA/Hibernate também tem algo sobre isso.

Na maquina que estou agora não tenho nenhum projeto em java. A noite eu pego e colo aqui.

x111

Segue um exemplo abaixo de um VO dentro de uma Entity

@Entity
@DiscriminatorValue("PF")
public class CadastroPessoaFisica extends Cadastro 
{
...
	@Embedded
	private CPF cpf;
...
}

@Embeddable
public final class CPF 
{
	@Column(name = "CPF_CNPJ")
	private String numero;
...
}
Criado 31 de janeiro de 2011
Ultima resposta 1 de fev. de 2011
Respostas 11
Participantes 3