Как хранить валюту в одном поле для таблицы для Joda Money & Jadira User Type

Я использую библиотеку 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; 

1 ответ

Я пробовал это с org.jadira.usertype.moneyandcurrency.moneta.PersistentMoneyAmountAndCurrency и получите ту же ошибку, что и вы:

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

Быстрое и грязное решение уже предложено в этом ответе SO, а точнее в первом пункте: вместо того, чтобы идти с Jadira, он предлагает использовать переходные поля.

Я сам не чувствую себя комфортно с этим подходом в качестве долгосрочного решения, поэтому я буду смотреть на реализацию UserType, как предлагается во втором пункте того же ответа SO.

Если у меня когда-нибудь будет работающая реализация, я отправлю ее сюда.

ps: есть также решение @org.hibernate.annotations.Parameter (name = "currencyCode", value = "USD"), которое, как мне кажется, не соответствует вашему варианту использования, поскольку оно жестко кодирует валюту в аннотации.

Другие вопросы по тегам