1

我正在使用 JodaMoney 库和 Jadira User 类型来存储货币值。我希望能够在每个表中存储一种货币,而不是需要这么多字段。

有没有办法将货币映射到同一个字段?这不起作用,因为它抱怨我不能混合可插入和可更新。

    @Columns(columns = {@Column(name = "currency"), @Column(name = "productsAmount")})
   @Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency")
    private Money totalProducts;

    @Columns(columns = { @Column(name = "currency", insertable = false, updatable= false), @Column(name = "orderTotalAmount") })
    @Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency")
    private Money orderTotalAmount; 
4

1 回答 1

0

我也试过了org.jadira.usertype.moneyandcurrency.moneta.PersistentMoneyAmountAndCurrency,得到了和你一样的错误:

org.hibernate.AnnotationException: Mixing insertable and non insertable columns in a property is not allowed

这个 SO answer已经提出了一个快速而肮脏的解决方案,更具体地说是第一点:他建议使用瞬态字段,而不是使用 Jadira。

我自己对这种方法作为长期解决方案并不满意,所以我会考虑实施 a UserType,正如在同一个 SO 答案的第二点所建议的那样。

如果我有一个可行的实现,我会把它发回这里。

ps:还有@org.hibernate.annotations.Parameter solution(name = "currencyCode", value = "USD")解决方案,我猜它不适合您的用例,因为它在注释中硬编码货币。

于 2016-03-13T18:05:21.893 回答