Как хранить валюту в одном поле для таблицы для 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"), которое, как мне кажется, не соответствует вашему варианту использования, поскольку оно жестко кодирует валюту в аннотации.