我正在使用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;
答案 0 :(得分:0)
我也尝试使用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")解决方案,我认为它不适合您的用例,因为它在注释中对货币进行了硬编码。