【问题标题】:How to store currency in a single field per table for Joda Money & Jadira User Type如何为 Joda Money 和 Jadira 用户类型在每个表的单个字段中存储货币
【发布时间】:2015-10-16 02:31:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: hibernate joda-money


    【解决方案1】:

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

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

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

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

    如果我有一个可行的实现,我会在这里发布。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多