2013-01-10 4 views
14

私のプロジェクトでは、unitOfIssueItemsで作業する必要があります。さて、いろいろな項目は、表現の単位が異なります。だから、私はこの状況をうまく処理するために、いくつかのAPIや何らかの方法を探していました。KG、Liter、Meter、KMなどのさまざまなアイテムを表すAPIがありますか

これらの単位を表現する方法を提供するAPIがありますか?私はJScienceが印象的だと聞いたことがありますが、もう一度JPAにマッピングして別の問題に直面しています。いくつかのGoogleの仕事の後で、私はいくつかの仕事がこの文脈では - JScience-JPAとして行われていることを知っていましたが、それはまだ生産で使用するのが安定していないようです。

私はまたJSR-275について見つけましたが、this JCP pageからは拒否されたようです。

私はunitsofmeasureに出くわしましたが、それはまだ詳細を掘り下げていません。しかし、再び同じ問題が発生します。これをJPAにマップできますか?

編集: -this SO questionから私はJava Numbers with Unitに出くわしたが、私はそれは、生産準備ができているか否かわかりません。

私は本当に、上記のオプションを見て、特に混乱しています。そしてJPAは、私がそれらのどれを使うことができるかどうかについてのさらなる懸念です。誰もこのような状況に直面して、そこから道を見つけましたか?私は本当にここでいくつかの助けが必要です。私は何を使うべきですか? 他の方法がない場合は、これらのユニットを表現するのに適切な方法があります。私が見る一つの方法はenumsを使うことです。しかし、もちろん、それが最後の選択であろう。

+0

@msandiford ..うん、わかっている。そして、私はそのことを私の質問にもそのリンクで引用しました。しかし、JPAでは使用できません。そこの問題。 :( –

答えて

1

あなた自身で作成することをおすすめします。おそらくUnit Of Measure Conversionが必要な場合もあります。

ARTS Retail Data Model Logical View

enter image description here

からUOMの定義と変換

enter image description here

+0

私の最終的な選択肢は自分のものですが、あらかじめ用意されたAPIを手に入れることができれば、時間が大幅に節約できます。誰かが魔法を発揮できるかどうかを見てみましょう:) –

+0

私はJPAでサードパーティーのAPIをどのようにマップすることができないか、UOMエンティティを使用する代わりにプリミティブ型コードを使用する必要があるかどうかはわかりません。 – vels4j

4

のために、私はそれが拒否された前に、私たちは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)。この1つの注意点は、持続性ベンダーの独立性を失いつつあります。

代替#3を使用して終了しましたが、それはかなりうまく機能しました。

+0

あなたの第3の選択肢は私の心にも来たものです。さて、私たちは 'Measure'オブジェクトを持っていないので、考慮することはできません。しかし、引用するだけで、JPAでは、変換部分は 'EclipseLink @ Converter'アノテーションを使って行うことができます。私は、*ジョーダタイム* 'DateTime'をMySQLタイムスタンプにマッピングするために数日前にそれを行い、それはかなりうまくいった。自分のカスタムクラスを作成して、これらのコンバージョンを調べます。しかし、それは時間がかかるでしょう。 –

+0

@RohitJainそれは本当です。すべてのユニットで機能する優れたコンバータを開発するには時間がかかりますが、完了すると残りはケーキです。注意しなければならないことは、JPAの実装に依存することです。そこから永続プロバイダに依存します。誰もがその贅沢を持っているわけではありません:-) –

+1

@エドウィン..あなたは正しいです。特定のPersistenceProviderへの依存がここでの関心事です。しかし、もし私がそれを自分でしなくてはならないと、それは狂ってしまうだろう。 :( –

関連する問題