0

現在、レガシーシステムのテーブルのペアからロード (読み取り専用) する Hibernate アノテーション付きクラスのペアを作成しようとしています。従来のシステムは、テーブルのキーイングに対して一貫した (多少時代遅れではあるが) アプローチを使用しています。マップしようとしているテーブルは次のとおりです。

Customer                     CustomerAddress
--------------------------   ----------------------------
customerNumber:string (pk)   customerNumber:string (pk_1)
name:string                  sequenceNumber:int    (pk_2)
                             street:string
                             postalCode:string

次のような CustomerAddress クラスを作成することで、これに取り組みました。

@Entity
@Table(name="CustomerAddress")
@IdClass(CustomerAddressKey.class)
public class CustomerAddress {

  @Id
  @AttributeOverrides({
    @AttributeOverride(name = "customerNumber", column = @Column(name="customerNumber")), 
    @AttributeOverride(name = "sequenceNumber", column = @Column(name="sequenceNumber"))
  })

  private   String       customerNumber;

  private   int          sequenceNumber;

  private   String       name;

  private   String       postalCode;
  ...
}

CustomerAddressKey クラスは、2 つのキー フィールドを持つ単純な Serializable オブジェクトです。Customer オブジェクトは次のように定義されます。

@Entity
@Table(name = "Customer")
public class Customer {

  private String customerNumber;

  private List<CustomerAddress> addresses = new ArrayList<CustomerAddress>();

  private String name;

  ...
}

だから、私の質問は次のとおりです: Customer テーブルで OneToMany 関係を表現するにはどうすればよいですか?

4

2 に答える 2

0

Bauer/King Hibernate の本を読んだことがあると思いますが、複合主キーを正しく実装する方法を説明するのが非常に苦手です。悪い本にだまされないでください。複合主キーはレガシーシステムのプロパティではありません...

于 2010-09-08T12:29:10.603 に答える
0

私自身の質問に対する答えがあるかもしれません。以下を顧客に追加します。

@OneToMany(mappedBy="customer")
@JoinColumn(name="customerNumber")
List<CustomerAddress> addresses = new ArrayList<CustomerAddress>();

そして、CustomerAddress への以下:

@ManyToOne
@JoinColumn(name="customerNumber")
protected Customer customer;

これは、私が最初に考えたよりも解決するのが簡単な問題であることが判明しました。典型的。

于 2010-05-09T16:36:27.773 に答える