1

以下のような顧客クラスと住所クラスがあります。顧客クラスのofficeAddressId、homeAddressId、およびsecondaryAddressIdは、テーブルの外部キーマッピング用です。

  public class customer implements serializable
    {
    private static final long serialVersionUID= -5830229553758180137L;
    int age;
    String officeAddressId= null;
    String homeAddressId= null;
    String secondaryAddressId= null;
    }

public class Address implements serializable
{
        private static final long serialVersionUID= -5130229553758180137L;
        private String              addressId           = null;
    private String              addressLine         = null;
    private String              cityName            = null;
    private String              stateName           = null;
    private String              countryName         = null;
    private String              pincode             = null;
}

私のデータベーステーブルは簡単です:

CREATE TABLE customer
(
customerID varchar(40) primary key,
officeAddressId varchar(40),
homeAddressId varchar(40),
secondaryAddressId varchar(40),
age int 
);

CREATE TABLE Address
(
addressID varchar(40) primary key,
addressLine varchar(40),
cityName varchar(40),
stateName varchar(40),
countryName varchar(40),
pincode varchar(10),
);

住所オブジェクト (自宅、オフィス、二次連絡先の住所の 3 つのオブジェクト) と顧客オブジェクトをサービス レイヤーで作成し、トランザクションを開きます。外部キー関係を hbm マッピング ファイルに与える方法と、これら 4 つのオブジェクト (3 つのアドレス オブジェクトと 1 つの顧客オブジェクト) を保存する方法と、外部キー関係がデータベースに正しく保持される順序がわかりません。

前もって感謝します....

4

2 に答える 2

1

まず、顧客クラスの名前を Customer に変更します。それで:

public Class Customer implements Serializable {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "office_address_id")
    private Address officeAddress;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "home_address_id")
    private Address homeAddress;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "secondary_address_id")
    private Address secondaryAddress;

    ...
}

public Class Address implements Serializable {
    ...

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "officeAddress")
    private Set<Customer> officeCustomers = new HashSet<Customer>(0);

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "homeAddress")
    private Set<Customer> homeCustomers = new HashSet<Customer>(0);

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "secondaryAddress")
    private Set<Customer> secondaryCustomers = new HashSet<Customer>(0);

    ...
}

もちろん、Address クラスのすべての顧客に対して getter を作成できます。

于 2013-09-09T13:49:28.360 に答える