2013-01-10 5 views
14

내 프로젝트에서 어딘가 으로 작업해야합니다. 이제 다양한 항목은 서로 다른 표현 단위를 가질 수 있습니다. 그래서 저는이 상황을 우아하게 처리하기 위해 API 또는 어떤 방법으로 검색하고있었습니다.KG, Liter, Meter, KM 등의 다양한 항목을 나타내는 API가 있습니까

이러한 단위를 나타내는 데 사용할 수있는 API가 있습니까? 나는 JScience이 인상적이라고 들었지만 다시는 JPA에 매핑하는 또 다른 문제에 직면하고있다. 일부 Google 작업을 한 후, 일부 작업은이 컨텍스트에서 - JScience-JPA과 같이 진행되고 있지만 프로덕션 환경에서는 아직 안정적이지 않은 것으로 보입니다.

나는 또한 JSR-275에 대해 뭔가를 찾았지만, this JCP page에서 거부당한 것 같습니다.

나는 아직까지 세부 사항을 파고 들지 않은 unitsofmeasure을 발견했습니다. 그러나 같은 문제가 다시 발생합니다. 이것이 JPA와 매핑 될 수 있습니까?

편집 :this SO questionJava Numbers with Unit에서 왔지만 생산 준비 여부는 알 수 없습니다.

나는 특히 위의 옵션을 본 후에 혼란 스럽다. 그리고 JPA는 내가 그 중 하나를 사용할 수 있는지 아닌지에 대한 추가 관심사입니다. 그런 상황에 직면 해 본 사람이 있습니까? 여기에 정말 도움이 필요해. 무엇을 사용해야합니까? 그리고 다른 방법이 없다면,이 단위들을 표현하는 적절한 방법이 무엇일까? 내가 보는 한 가지 방법은 enums을 사용하는 것입니다. 그러나 그것은 물론 마지막 선택 일 것입니다.

+0

@msandiford .. 그래, 알아. 그리고 저는 그 질문을 저 링크로 인용했습니다. 그러나 JPA에서는 사용할 수 없습니다. 거기에 문제가있어. :( –

답변

1

직접 작성 하시겠습니까? 아마도 Unit Of Measure Conversion이 필요할 수도 있습니다. 이 거부되기 전에 ARTS Retail Data Model Logical View

enter image description here

에서와 전환

enter image description here

+0

글쎄, 내 자신의 글을 쓰는 것이 나의 마지막 선택 일 것이다.하지만 미리 만들어진 API를 얻을 수 있다면 많은 시간을 절약 할 수있다. 누군가 마법을 생각해 낼 수 있는지 보자. :) –

+0

물론입니다. JPA에서 어떻게 써드 파티 API와 매핑 할 수 있을지 모르겠다. 그렇지 않으면 UOM 엔티티 대신에 일종의 원시 코드를 사용해야한다. – vels4j

4

에 대한 UOM의

정의 우리는 JSR-275 (광범위하게 사용했다하는 프로젝트에 있었다 JCP에 의해). 원래 우리는 JPA를 사용하지 않았지만 나중에 JPA 2.0을 사용하여 모델을 유지해야한다는 결론을 얻었으며 측정 개체의 지속성을 처리해야했습니다.

귀하의 질문에 대한 답변이 아닐 수도 있지만 토론에 흥미로운 생각이들 수도 있습니다.

  1. 조치가 직렬화했고, JPA는 직렬화 객체를 매핑 할 수 있습니다 :

    우리는 몇 가지 대안을 고려했다. 여기서 문제는 데이터베이스에서이 측정 값이 이진 객체로 저장되고 직렬화의 모든 문제 (예 : 버전 관리 등)에 적용된다는 것입니다.
  2. 데이터를 원시 형식으로 유지하여 모델을 적용 할 수 있습니다 (즉, 정수, 배수 등) 우리는 모든 단위에 대해 국제 측정 단위를 사용하는 것에 동의합니다. 따라서 필드는 JPA 지원 유형을 기반으로하지만 getter 및 setter는 계수 객체를 사용합니다. 속성이 아닌 필드를 기반으로 JPA 매핑을 구성합니다.여기서 문제는 도메인 객체의 공용 인터페이스에 영향을주지 않고 캡슐화 된 데이터를 변경하기 위해 모델을 변경해야한다는 것입니다.
  3. 우리는 지속성 공급자로서 hibernate를 사용 했으므로 JPA 표준을 벗어나서 hibernate custom value types을 사용하여 측정 개체를 해당 기본 유형에 매핑 할 수 있습니다. 그런 다음이 목적을 위해 최대 절전 모드 주석을 사용하여 유형을 매핑 할 수 있습니다. (See an example here). 이 중 하나의 경고는 지속성 공급 업체의 독립성을 잃어 가고 있습니다.

우리는 대안 # 3을 사용하여 끝냈습니다.

+0

당신의 제 3의 대안은 또한 내 마음에 온 것입니다. 이제 우리는'Measure' 객체가 없으므로 고려할 수 없습니다. 그러나 JPA에서 따옴표를 붙이면 변환 부분은'EclipseLink @ Converter' 주석을 사용하여 수행 할 수 있습니다. 나는 * yoda time * DateTime을 MySQL TimeStamp에 매핑하기 위해 며칠을 되돌아 보았습니다. 나 자신의 사용자 정의 클래스를 작성하여 이러한 변환을 살펴 보겠습니다. 그러나 그것은 시간이 걸릴 것입니다. –

+0

@RohitJain 사실입니다. 모든 유닛에서 작동하는 좋은 변환기를 개발하는 데 시간이 걸리지 만 일단 완료되면 나머지는 케이크 조각입니다. 주의해야 할 점은 JPA 구현에 의존한다는 것입니다. 당신은 거기에서 당신의 영속성 제공자에 의존합니다. 모든 사람들이 그 럭셔리를 가지고있는 것은 아닙니다 :-) –

+1

@Edwin .. 네 말이 맞아. 특정 PersistenceProvider에 대한 종속성이 여기에서 중요합니다. 하지만, 내가 혼자서해야만한다면, 그것은 정신없이 울릴 것입니다. : –