0

私は Hibernate と MySql を使用しています (両方の古いバージョン - Seam 2 プロジェクト)。

マッピング テーブルとエンティティ アノテーションを設定して、2 つのエンティティ間の関係のタイプを「色付け」できるようにする方法がわかりません (グラフのエッジに色を付けるように)。私のスキーマの概算は次のとおりです。

お客様

  • ID
  • フルネーム
  • 電話番号

お店

  • ID
  • 支店名
  • addressFirstLine
  • addressSecondLine

customer_store

  • 顧客ID
  • store_id
  • 顧客タイプ

顧客タイプ

  • 値 (列挙: 個人、企業、内部)

これらの関係を適切にマッピングするために Hibernate アノテーションとスキーマを設計するための最良のアプローチは何ですか?

私が見たアプローチ:

  1. オブジェクトに3 つSet<Store>のプロパティ、それぞれに 1 つ、または 1 つのメソッドを持つことができるように感じます。ただし、このマッピングを作成する方法がわかりません。また、この特定のシナリオのドキュメントを見つけるのに苦労しています。CustomerCustomerTypeSet<Store> getStores(CustomerType)
  2. customertype( customer_store_individualcustomer_store_corporateなど)ごとにテーブルを持つようにスキーマを変更できます。これは冗長に感じますが、問題は解決します。ただし、休止状態に魔法をかけてこのマッピングを整理し、これらを 1 つのテーブルに結合することをお勧めします。
  3. customer_storeテーブルのエンティティを作成できました。これは本当にひどい回避策のように感じます。 私はこの解決策が好きではありませんが、この回答はすでにこのタイプの関係をカバーしています。

ドメインを難読化しようとしていることに注意してください。そのため、顧客やストア オブジェクト自体について提案することは避けてください。私のドメイン オブジェクトが正しく因数分解され、それらが本当に多対多の関係であると仮定しましょう。私が問題を抱えているのは、各リンクのタイプを区別するだけです:)

4

1 に答える 1

0

それが最善の解決策であるかどうかはわかりませんが、関係の値オブジェクトを使用します

@Entity
public class Customer
{
    // to get all stores
    @ElementCollection
    public Set<StoreCustomer> stores;

    // to get specific stores
    public Set<Store> getStores(CustomerType);
}

@Entity
public class Store
{
    // to get all customers
    @ElementCollection
    public Set<StoreCustomer> customers;

    // to get specific customers
    public Set<Customer> getCustomers(CustomerType);
}

@Embeddable
public class StoreCustomer
{
    @ManyToOne
    public Customer customer;

    @ManyToOne
    public Store store;

    public CustomerType type;
}
于 2012-06-08T06:59:32.387 に答える