标签: joda-money

Joda-Money通过hibernate持久化

JodaTime有一个提供Hibernate持久性的库.最近我开始关注Joda-Money并开始看看如何使用hibernate持久保存,我没有看到任何库.

有什么建议?

java hibernate joda-money

12
推荐指数
3
解决办法
6093
查看次数

使用Spring Data JPA将Joda Money的总和拆分为2列

我正在尝试使用Jadira类型的JODA钱类来处理到Hibernate 4的映射.

它工作正常(除了我有太多的货币字段).

但我需要构建一个聚合查询来总结一些总数.

这是类型声明.

@Columns(columns = { @Column(name = "total_currency", length=10), @Column(name = "total") })
@Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency")
private Money total;
Run Code Online (Sandbox Code Playgroud)

我正在尝试定义一个查询,例如:

@Query(value="select sum(oi.total) from OrderItem oi where oi.order = ?1")
Double calculateSubtotal(Order order);
Run Code Online (Sandbox Code Playgroud)

有没有办法使用JPQL聚合Money字段的查询?

谢谢.

java hibernate jpa spring-data joda-money

6
推荐指数
1
解决办法
822
查看次数

在单元测试中使用什么货币?

我正在开发一个严重依赖Joda-Money的应用程序,并且有许多单元测试来验证我的业务逻辑.对我来说,一个(不可否认的是次要的)关键点是用什么样的Money/ BigMoney对象进行测试; 具体来说,CurrencyUnit使用什么.

在我看来,我有几个选择:

  • 只是用 USD

    这显然是最简单的方法,我的大多数实际应用都将使用美元,因此它有一定的意义.另一方面,它感觉相当以美国为中心,我担心它会冒险让特定货币的错误不受控制.

  • 使用另一种真实货币,比如 CAD

    这会捕获错误的硬编码USD,但除此之外并没有比使用更好USD.

  • 使用专用的"假"货币,即XTS

    毕竟,这显然XTS是"保留用于测试".但Joda将伪货币表示为带-1小数位的货币.实际上,Joda-Money中货币之间的主要区别是小数位数,因此这可能会掩盖涉及小数位精度的任何错误,例如错误地舍入为整数值.

  • 注册我自己的自定义货币 CurrencyUnit.registerCurrency()

    这显然有效,但看起来有点奇怪,因为有其他选择.

  • 使用CurrencyUnit由模拟库创建的实例

    与注册自定义货币几乎相同.

再次,这显然是一个小问题,但我很好奇是否有这样的案例的标准做法,或者是否有明确的理由特别喜欢这些选项之一.

java unit-testing joda-money

6
推荐指数
1
解决办法
283
查看次数

如何在 Hibernate 中使用 org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency 类型映射 Joda Money?

试试这个:

@Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency")
private org.joda.money.Money price;
Run Code Online (Sandbox Code Playgroud)

得到这个:

org.hibernate.MappingException: property mapping has wrong number of columns:domain.ClientOrderItem.price type: org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency
Run Code Online (Sandbox Code Playgroud)


@Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmount",
parameters = {@org.hibernate.annotations.Parameter(name = "currencyCode", value = "USD")})
Run Code Online (Sandbox Code Playgroud)

效果很好,但我想将货币存储在数据库中并能够使用不同的货币。

java hibernate joda-money

5
推荐指数
1
解决办法
2017
查看次数

ResultSet::getBigDecimal 抛出 joda-money 的比例异常

尝试从 MySQL 数据库读取的 BigDecimal 创建 Joda-MoneyMoney对象会引发错误。

这段代码:

PreparedStatement p_stmt = ...;
ResultSet results = ...;
Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"));
Run Code Online (Sandbox Code Playgroud)

抛出这个:

java.lang.ArithmeticException: Scale of amount 1.0000 is greater than the scale of the currency USD
    at org.joda.money.Money.of(Money.java:74)
    at core.DB.getMoney(DB.java:4821)
Run Code Online (Sandbox Code Playgroud)

我实际上已经通过添加舍入解决了该错误:

Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"), RoundingMode.HALF_UP);
Run Code Online (Sandbox Code Playgroud)

但是,我对这个解决方案持怀疑态度。是最好的吗?

我用来按照这个 SO 答案DECIMAL(19,4)将货币值存储在数据库上。老实说,这有点让我困惑,为什么那里的回答者要求数据库上的小数点后 4 位精度,但我倾向于相信高价值的答案,并且我认为他们知道他们在说什么,并且我会后悔没有遵循他们的要求建议。然而 Joda-Money 不喜欢美国货币的小数点后 4 位精度。也许是国际标准要求小数点后 4 位精度?没有把握..DECIMAL(19,4)

为了使问题简洁:

  1. RoundingMode.HALF_UP解决此错误的理想解决方案吗?
  2. 我应该将 MySQL DB 的精度从 更改为DECIMAL(19,4)DECIMAL(19,2)
  3. 有没有办法改变 Joda-Money …

java mysql jdbc joda-money

5
推荐指数
1
解决办法
3122
查看次数

如何在MySQL中存储joda.money

我有一个具有数据类型joda.money属性的类。如何将这个属性映射到mysql中。

我的课是:

@Table(name =“ products”)公共类Product(){@Column(name =“ name”)字符串名称;@Column(name =“ money”)金钱金钱;}

我正在使用Spring Hibernate

谁能说出如何将此模型存储到mysql中?

hibernate joda-money

2
推荐指数
1
解决办法
841
查看次数

将字符串转换为货币

我有以下字符串

String money = "USD0.00" 
Run Code Online (Sandbox Code Playgroud)

想把这个转换成 org.joda.money.Money

我是否需要在此处拆分货币单位和双倍值,并需要在 Money. 或者有任何库 api 可以转换它吗?

java java-8 joda-money

2
推荐指数
1
解决办法
96
查看次数

标签 统计

joda-money ×7

java ×6

hibernate ×4

java-8 ×1

jdbc ×1

jpa ×1

mysql ×1

spring-data ×1

unit-testing ×1