1

JodaMoney ライブラリと Jadira User 型を使用して金銭的価値を保存しています。非常に多くのフィールドを必要とするのではなく、テーブルごとに 1 つの通貨を格納できるようにしたいと考えています。

通貨を同じフィールドにマッピングする方法はありますか? これは、挿入可能と更新可能を混在させることができないと不平を言うため、機能しません。

    @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 を使用する代わりに、一時的なフィールドを使用することを提案しています。

私自身、長期的な解決策としてこのアプローチにあまり満足していないのでUserType、同じSO回答の2番目のポイントで提案されているように、実装を検討します。

機能する実装があれば、ここに投稿します。

ps: @org.hibernate.annotations.Parameter solution(name = "currencyCode", value = "USD")ソリューションもあります。これは、注釈に通貨をハードコーディングしているため、ユースケースに合わないと思います。

于 2016-03-13T18:05:21.893 に答える