私のアプリケーションの設計では、 と の 2 つのクラスがあるPerson
としCompany
ます。また、 と の間の 1 対多の関係を定義する UML ダイアグラムを定義した Person
としますCompany
。すべてのPerson
オブジェクトは 1 つの だけに属する必要がCompany
あり、 には複数のCompany
を含めることができますPerson
。
この単純な制約が常に保持されるようにするためのベスト プラクティスは何Person
ですかCompany
? 私は3つのアプローチを考えました:
私の制約に決して違反しない、完璧でバグのないコードを用意してください。ただし、現実主義者として、特に制約の数が増えるにつれて、これが困難または不可能であることを私は知っています。
ensureCorrectness()
すべての制約を手動でチェックするメソッドを実装します。この例では、すべての をループし、 1 つだけにそのが含まれてPerson
いることを確認します。そうでない場合は、エラーが出力されます。私はこのメソッドを頻繁に呼び出します。Company
Person
たとえば、Hibernate を使用してデータベース スキーマを定義し、データをデータベースに保存します。スキーマでは、UML 図の制約と一致するように制約を定義できます。次に、データをデータベースに永続化するたびに、Hibernate はすべての制約をチェックし、問題が発生した場合はエラーを出力します。
しかし、(1) 完全性、(2) 手動検証、または (3) リレーショナル データベースに依存しない、Java でこれを行うための別のよりクリーンな方法があるかどうか疑問に思わずにはいられません。次のようなコードで注釈を指定できるライブラリまたはフレームワークはありますか。
@OneToMany(Person, Company)
または、より具体的には次のようになります。
@OneToMany(Person, Company.persons)
Company
クラスにList<Person> persons
メンバー変数があると仮定します。
また、個人の社会保障番号がすべてPerson
の s で一意であることを確認したい場合は、次のように言えます。
@Unique(Person.SSN)
このようなものはJavaに存在しますか?