1

@Id値を文字列としてのみ含める必要がある場合、単一のエンティティを作成することは理にかなっていますか?

@Entity
class CountryCode {
   @Id
   String letterCode; //GBR, FRA, etc
}

@Entity
class Payment {
   CountryCode code;
   // or directly without further table: String countryCode;
}

それとも、CountryCodeエンティティを作成する代わりに、文字コードを文字列値として使用しますか?

たとえば、後で特定の国コードを含むすべての支払いを取得できるようにする必要があります。これは、両方のソリューションで可能な場合があります。しかし、どちらが優れていますか(なぜ)?

4

3 に答える 3

3

はい、エンティティをルックアップとして使用している場合は可能です。あなたの例では、文字コードの説明 (フランス、イギリスなど) の列と、それがアクティブかどうかに関係なく 3 番目の列を追加し、挿入されたときと最後に変更されたときの列を追加することができます。

于 2013-11-05T11:44:57.920 に答える
1

このようなテーブルを作成してデータの一貫性を確保することは理にかなっています。つまり、 noPaymentは存在しない で作成されCountryCodeます。別のエンティティ (テーブル) と外部キーを一緒に持つPaymentことで、データベースの一貫性をチェックできます。

別の可能なアプローチは、コード フィールドにチェック制約を設定することですが、コードが追加/削除されたり、このタイプの列が複数ある場合、エラーが発生しやすくなります。

于 2013-11-05T11:45:54.217 に答える
1

Class as String 属性 (またはタイプミスを防ぐための Enum) を追加するletterCodeと、テーブルに対して結合を作成する必要がないため、フェッチのパフォーマンスが向上します。PaymentCountryCode

于 2013-11-05T11:46:33.170 に答える