だから、私はたくさんのリレーションとルックアップテーブルを持つアプリケーションに取り組んでいますが、それはすべてこれに要約されます:
人
id INT (PK)
... (name, address, etc)
optcode VARCHAR (FK to Options)
typecode VARCHAR (FK to Types)
オプション
optcode VARCHAR (PK)
optdesc VARCHAR
... (more meta data, like date added, etc)
タイプ
code VARCHAR (PK)
desc VARCHAR
... (more meta data, like date added, etc)
私は休止状態を使用してこれらのテーブルにアクセスしています。一方で、オブジェクトリレーションには利点がありますが、他方では、コードに文字列を使用する方がうまく機能します。
オブジェクト関係対キー対両方の方が優れているのは何ですか?
キーを使用するだけ:
public class Person {
private int id;
... (more attributes)
private String optcode;
private String typecode;
}
In the services:
Person person = new Person();
person.setOptcode("ABC");
person.setTypecode("XYZ");
session.save(person);
またはO/Rの方法:
public class Person {
private int id;
... (more attributes)
@JoinColumn
private Options option;
@JoinColumn
private Types type;
}
In the services:
Person person = new Person();
person.setOption(new Options("ABC")); //Assume constructor fills in the 'optcode'
person.setType(new Types("XYZ")); //Same, with 'code'
session.save(person);
永続性のほとんどの場合、私は「コード」しか持っていませんが、データを表示するときに「desc」を表示すると便利なことがよくあります
OptionsエンティティとTypesエンティティを管理する場所があるので、それらはとにかく存在しますが、オブジェクトで「コード」をラップする必要があるのは面倒です。
さまざまな方法の長所/短所は何だと思いますか?両方をPersonオブジェクトに入れて、より便利なものを使用できるようにした場合はどうなりますか?文字列を新しいOptions/Typeエンティティに押し込むだけのセッターを作成するのはどうですか?
一貫性を保つために最善の方法を特定しようとしています。現在、必要な新しいエンティティの数を最小限に抑えていますが、最終的にはすべてが休止状態のエンティティで表されます。
更新: Personエンティティはほぼ20の一意のエンティティリレーション(それぞれが異なるテーブルを指している)を持つことになります。web-uiにはおそらく各テーブルの値を含むドロップダウンリストがあるので、私は永続性に使用する「コード」があります。 関連:私は実際にPersonImpl(プレーンPOJO)とPersonEntity(Hibernate Entity)とDozerMappingを使用しています。