2013-01-10 8 views
14

W moim projekcie, gdzieś muszę pracować z unitOfIssue z Items. Teraz różne przedmioty mogą oczywiście mieć różne jednostki reprezentacji. Tak więc szukałem jakiegoś API lub w jakiś sposób, aby elegancko poradzić sobie z tą sytuacją.Czy istnieje dostępne API do reprezentowania różnych jednostek pozycji, takich jak KG, litr, metr, km itp.

Czy istnieje dostępne API, które zapewnia sposób reprezentacji tych jednostek? Słyszałem o JScience, który wydaje się imponujący, ale znowu mam inny problem z mapowaniem go w JPA. Po pracy w Google dowiedziałem się, że niektóre prace trwają w tym kontekście jako - JScience-JPA, ale wydaje się, że nie są jeszcze stabilne do wykorzystania w produkcji.

Znalazłem również coś o JSR-275, ale od this JCP page wydaje się, że został odrzucony.

Potem natknąłem się na unitsofmeasure, którego jeszcze nie przekopałem. Ale znowu pojawia się ten sam problem. Czy można to zmapować za pomocą JPA?

Edycja: - Od this SO question natknąłem Java Numbers with Unit ale nie wiem, czy to jest produkcja gotowy czy nie.

Jestem bardzo zdezorientowany, szczególnie po zobaczeniu powyższych opcji. A WZP jest dodatkową obawą, czy mogę skorzystać z któregoś z nich, czy też nie. Czy ktokolwiek kiedykolwiek stanął w obliczu takiej sytuacji i znalazł wyjście? Naprawdę potrzebuję tutaj pomocy. Co powinienem użyć? A jeśli nie ma innego wyjścia, to jaki byłby właściwy sposób reprezentowania tych jednostek. Jednym ze sposobów, które widzę jest użycie enums. ale, oczywiście, byłby to ostatni wybór.

+0

@msandiford .. Tak, wiem. I zacytowałem to pytanie w moim pytaniu również za pomocą tego linku. Ale nie można go używać z JPA. Problem tam. :( –

Odpowiedz

1

Proponuję napisać własną. Prawdopodobnie będziesz potrzebować również Unit Of Measure Conversion.

Definicja UOM od ARTS Retail Data Model Logical View

enter image description here

i nawrócenia

enter image description here

+0

Cóż, pisanie własnego byłoby moim ostatnim wyborem, ale jeśli uda mi się zdobyć trochę gotowego API, to zaoszczędzi mi to wiele czasu. Zobaczmy, czy ktoś może wymyślić jakąś magię :) –

+0

Pewnie. Nie jestem pewien, jak można mapować za pomocą api stron trzecich w JPA, czy też trzeba użyć jakiegoś prostego kodu, zamiast używać jednostek UOM. – vels4j

4

byłem w projekcie, w którym mieliśmy szerokie wykorzystanie JSR-275 (zanim został odrzucony przez JCP). Początkowo nie używaliśmy JPA, ale później zdecydowaliśmy, że powinniśmy utrzymywać nasz model za pomocą JPA 2.0 i musiałem uporać się z trwałością moich obiektów miar.

To może nie być odpowiedź na twoje pytanie, ale może przynieść kilka ciekawych myśli do dyskusji.

Rozważaliśmy kilka alternatyw:

  1. Środki były serializacji i JPA można odwzorować dowolny zaszeregować obiekt. Problem polega na tym, że pomiary byłyby zapisywane jako obiekty binarne w bazie danych i podlegałyby wszystkim problemom serializacji (np. Wersjonowaniu itp.).
  2. Możemy dostosować nasz model, zachowując dane w surowych typach (tj. liczby całkowite, podwójne, itd.) pod warunkiem, że zgadzamy się na użycie międzynarodowej jednostki miary dla każdej jednostki. Tak więc pola będą oparte na typach obsługiwanych przez JPA, ale moduły pobierające i ustawiające będą używać obiektów miar. Skonfiguruj mapowanie JPA na podstawie pól, a nie właściwości.Problem polegał na konieczności zmiany modelu w celu zmiany zamkniętych danych bez wpływu na publiczny interfejs obiektów domeny.
  3. Ponieważ używaliśmy hibernacji jako naszego dostawcy trwałości, mogliśmy zaakceptować odejście od standardu JPA i użyć hibernate custom value types do odwzorowania obiektów miar na odpowiadające im typy pierwotne. Następnie moglibyśmy mapować nasze typy za pomocą adnotacji hibernacji do tego celu. (See an example here). Ograniczeniem w tym jest utrata niezależności dostawcy uporczywości.

Skończyło się na tym, że używamy alternatywy nr 3 i działało to całkiem dobrze.

+0

Twoja trzecia alternatywa jest tym, co przyszło mi do głowy. Teraz, ponieważ nie mamy teraz żadnego obiektu "Measure", więc nie można go uznać. Ale, aby zacytować, w JPA, część konwersji może być wykonana za pomocą adnotacji 'EclipseLink @ Converter'. Zrobiłem to kilka dni temu, aby mapować * czasy joda * 'DateTime' na MySQL TimeStamp i działało całkiem dobrze. Przyjrzę się tym konwersjom, tworząc własną niestandardową klasę. Ale zajęłoby to czas. –

+0

@RohitJain To prawda. Opracowanie dobrego konwertera, który działa dla wszystkich jednostek, zajmuje trochę czasu, ale gdy już to zrobi, reszta to bułka z masłem. Ograniczeniem jest to, że gdy to zrobisz, będziesz zależał od tej implementacji JPA; w tym momencie polegasz na swoim dostawcy uporczywości. Nie każdy ma ten luksus :-) –

+1

@Edwin .. Masz rację. Zależność od konkretnego PersistenceProvider jest tutaj problemem. Ale jeśli będę musiał to zrobić na własną rękę, będzie to szalenie szalone. :( –

Powiązane problemy