0

基本的には、企業と個人の住所を実装したいと考えています。アドレスは別個のエンティティです。

会社は、個人の AddressContext と同じ Address エンティティを使用する AddressContext を持つことができます

AddressContext は、「私の自宅の住所」など、個人に関する住所の意味を与えます。

Java クラス:

public class Address {
}

public class AddressContext {
    private Address address;
    private String name;
}

public class Individual {
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   private Set<AddressContext> addresseContexts;
}

public class Company {
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   private Set<AddressContext> addresseContexts;
}

必要なデータベース address_context データベース テーブル

CREATE TABLE `address_Context` (
   `ID` bigint(20) NOT NULL AUTO_INCREMENT,
   'address_id bigint(20) NOT NULL, 
   'RELATED_ITEM_ID bigint(20) NOT NULL,
   'RELATED_ITEM_TYPE varchar(50) NOT NULL,
   'NAME' varchar(5) 
);

基本的に以下のものを持っています

1, 1, 1, Individual, 'John's House';
2, 2, 1, Company, 'Depoy';

実際に起こっていることは、個別のテーブルが作成されていることです

companies_address_contexts
individuals_address_contexts

上記は可能ですか?AddressContext もサブクラス化したくありません

前もって感謝します

4

1 に答える 1

1

特定のアドレスをエンティティ タイプ (個人/会社) に制限したくない場合。自営業者が自宅の住所を会社の住所として使用する (エッジ) ケースについて考えてみましょう。または、マルチテナント ユニットがオフィス コンプレックスに変換される場合。要点アドレスは、システム内の他のエンティティが関連付けテーブルを介して参照する完全に別個のエンティティである必要があります。

あなたの場合、関連テーブルはとにかく生成されました。コードでそれらを使用するには、いくつかのマイナーなリファクタリングが必要です。このようなもの:

@Entity
public class Address {
    // address fields etc
}

@Entity
public class Individual {
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinTable(name = "individual_addresses", 
       joinColumns = { @JoinColumn(name = "individual_id", unique = true) }, 
       inverseJoinColumns = { @JoinColumn(name = "address_id") })
   private Set<Address> addresses;
}

@Entity
public class Company {
   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinTable(name = "company_addresses", 
       joinColumns = { @JoinColumn(name = "company_id", unique = true) }, 
       inverseJoinColumns = { @JoinColumn(name = "address_id") })
   private Set<Address> addresses;
}
于 2012-04-20T11:16:42.307 に答える