Powered by SmartDoc

Relation Mapping (1) 一対一の関係

Relation Mapping とは

Relation Mappingは、リレーショナルデータベースの複数のテーブルを組み合わせてデータにアクセスするときの手法です。

リレーショナルデータベースでは、正規化という手法によりテーブルが細かく分割されていきます。このようなテーブル同士を組み合わせて情報を取得するとき、Relation Mappingの考え方が利用されます。

Relation Mappingには、次の4パターンがあります。

一対一

一対一の関係

図9.1[一対一の関係]は、一対一の関係を表したものです。

「社員テーブル」では、社員の情報を表しています。社員の住所は「住所テーブル」で管理されており、住所テーブルの主キーを社員テーブルでは項目として管理しています。

このとき、ひとりの「社員」はひとつの「住所」と対応することになります。これが「一対一」の関係です。

社員テーブルをEntity Beanで表してみましょう。

@OneToOneというAnnotationで修飾されているaddressプロパティに注目してください。

社員テーブルでは項目として管理している住所テーブルの主キーの部分を、Addressオブジェクトとして管理することになります。このAddressオブジェクトは、住所テーブルと対応関係にあるEntity Beanになります。

このようにして、EmployeeとAddressが@OneToOne Annotationによって一対一の関係を構築しているのです。

@Entity
@Table(name="EJB_EMPLOYEE")
public class Employee implements Serializable {
    @Id  @Column(name="EMP_ID")
                    :
    @OneToOne(cascade=CascadeType.ALL)    
    @JoinColumn(name="ADDR_ID")
    public Address getAddress() {  return address;  } 
}

最後に、Session Facadeを使って、ある社員の住所を取得する例をご紹介しましょう。

public Address getAddressForEmployee(Integer employeeId) {
        Employee employee =
			em.find(Employee.class, employeeId);
        return employee.getAddress();
}