Есть ли доступный API для представления различных единиц товара, таких как КГ, Литр, Метр, КМ и т. Д.
В моем проекте где-то я должен работать с unitOfIssue
из Items
, Теперь, конечно, различные предметы могут иметь разные единицы представления. Итак, я искал какой-то API или какой-то способ, чтобы элегантно справиться с этой ситуацией.
Есть ли какой-либо доступный API, который предоставляет какой-либо способ представления этих единиц? Я слышал о JScience, который кажется впечатляющим, но снова я сталкиваюсь с другой проблемой с отображением в JPA
, После некоторой работы в Google, я обнаружил, что в этом контексте идет какая- то работа, как - JScience-JPA, но кажется, что он еще не стабилен для использования в производстве.
Я также нашел кое-что о JSR-275, но с этой страницы JCP кажется, что она была отклонена.
Затем я наткнулся на единицы измерения, которые я еще не углубляюсь в детали. Но опять та же проблема возникает. Можно ли это сопоставить с JPA?
Редактировать: - Из этого вопроса я наткнулся на Java Numbers с модулем, но я не знаю, готово ли это к производству или нет.
Я действительно запутался, особенно после просмотра этих вариантов выше. И JPA вызывает дополнительную обеспокоенность относительно того, могу ли я использовать любой из них или нет. Кто-нибудь сталкивался с такой ситуацией и нашел выход из нее? Мне действительно нужна помощь здесь. Что я должен использовать? И если другого выхода нет, то каким был бы уместный способ представлять эти единицы. Один из способов, который я вижу, это использование enums
, но, конечно, это был бы последний выбор.
2 ответа
Я был в проекте, в котором мы широко использовали JSR-275 (до того, как он был отклонен JCP). Первоначально мы не использовали JPA, но позже было решено, что мы должны сохранить нашу модель, используя JPA 2.0, и мне пришлось иметь дело с постоянством моих объектов мер.
Это может не быть ответом на ваш вопрос, но может принести некоторые интересные мысли для обсуждения.
Мы рассмотрели несколько вариантов:
- Меры были сериализуемы, и JPA может отобразить любой сериализуемый объект. Проблема здесь заключается в том, что меры будут сохранены в виде двоичных объектов в базе данных, и они будут подвержены всем вопросам сериализации (например, управление версиями и т. Д.)
- Мы могли бы адаптировать нашу модель, сохраняя данные в необработанных типах (т. Е. Целые, двойные и т. Д.), При условии, что мы согласимся использовать международную единицу измерения для каждой единицы. Таким образом, поля будут основываться на типах, поддерживаемых JPA, но методы получения и установки будут использовать объекты измерения. Настройте отображение JPA на основе полей, а не свойств. Проблема здесь заключалась в том, чтобы изменить модель для изменения инкапсулированных данных, не затрагивая открытый интерфейс объектов домена.
- Поскольку мы использовали hibernate в качестве нашего поставщика сохраняемости, мы могли согласиться отклониться от стандарта JPA и использовать настраиваемые типы значений hibernate для сопоставления объектов измерения с соответствующими примитивными типами. Затем мы можем отобразить наши типы, используя для этого аннотации в спящем режиме. ( Смотрите пример здесь). Предостережение в этом случае теряет постоянство независимости поставщика.
В итоге мы использовали альтернативу № 3, и она сработала довольно хорошо для нас.
Я предлагаю вам написать свой собственный. Вероятно, вам может понадобиться Unit Of Measure Conversion
также.
Определение UOM из логической модели ARTS Retail Data Model
и для преобразования