ヘッダーをスキップ
Oracle SOA Suite開発者ガイド
10g(10.1.3.1.0)
B31839-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

4.2 データベース表にマップされるJPAエンティティの作成

データベース表にマップされるJPAエンティティを作成する最も簡単な方法は、エンティティ作成(表ベース)ウィザードを使用することです。 このウィザードでは、データベース接続の取得または作成、使用する表の選択、およびJPAエンティティの作成のプロセスが順にガイドされます。

エンティティ作成(表ベース)ウィザードは、新規ギャラリの「Business Tier」セクションから使用できます。


ヒント:

表からエンティティを作成するときは、複数のエンティティを同時に作成できます。 データベース内の表が外部キー制約で関連付けられている場合は、生成されたエンティティ内にフィールドが作成され、注釈が付けられます。 このため、通常は、すべてのエンティティを同時に生成する方法がベスト・プラクティスです。

4.2.1 データベース表からのJPAエンティティ作成時の処理内容

表からJPAエンティティを作成すると、各エンティティをサポートするために新規Javaクラスが作成されます。 データベース表間に関連がある場合は、これらの関連が検出され、ソース・コード内に注釈を使用して保持されます。

例4-3で、ソース・コード内の@記号で始まる注釈に注意してください。 注釈は、EJBエンティティの使用を大幅に簡素化します。

例4-1 データベース表から作成される顧客エンティティ

package org.soademo.customerservice.persistence;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.TableGenerator;

@Entity
@NamedQueries( { @NamedQuery(name = "Customer.findAllCustomer",
                             query = "select object(o) from Customer o")
        ,
        @NamedQuery(name = "Customer.findCustomerById", query = "select object(cust) from Customer cust where cust.custid = :custid")
        ,
        @NamedQuery(name = "Customer.findCustomerByEmail", query = "select object(cust) from Customer cust where cust.email = :email and cust.password = :password")
        } )

@Table(name = "CUSTOMER")
@SequenceGenerator(name = "SEQ_ID_GENERATOR", sequenceName = "EJB_SEQ_ID_GEN")
@TableGenerator(name = "TABLE_ID_GENERATOR", table = "EJB_TAB_ID_GEN",
                pkColumnName = "ID_NAME", valueColumnName = "SEQ_VALUE",
                pkColumnValue = "SEQ_GEN")
public class Customer implements Serializable {
    private String creditcardnumber;
    private String creditcardtype;
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
                    generator = "TABLE_ID_GENERATOR")
    @Column(nullable = false)
    private String custid;
    private String email;
    private String fname;
    private String lname;
    private String phonenumber;
    private String status;
    private String password;

    @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL } )
    @JoinTable(name = "CUSTOMER_ADDRESS",
               joinColumns = { @JoinColumn(name = "CUSTID")
                } , inverseJoinColumns = { @JoinColumn(name = "ADDRESSID")
                } )
    private List<Address> addressList;

    public Customer() {
    }

    public String getCreditcardnumber() {
        return creditcardnumber;
    }

    public void setCreditcardnumber(String creditcardnumber) {
        this.creditcardnumber = creditcardnumber;
    }

    public String getCreditcardtype() {
        return creditcardtype;
    }

    public void setCreditcardtype(String creditcardtype) {
        this.creditcardtype = creditcardtype;
    }


    public String getCustid() {
        return custid;
    }

    public void setCustid(String custid) {
        this.custid = custid;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public String getPhonenumber() {
        return phonenumber;
    }

    public void setPhonenumber(String phonenumber) {
        this.phonenumber = phonenumber;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<Address> getAddressList() {
        if (addressList == null) {
            addressList = new ArrayList();
        }
        return addressList;
    }

    public void setAddressList(List<Address> addressList) {
        this.addressList = addressList;
    }

    public Address addAddress(Address address) {
        getAddressList().add(address);
        return address;
    }

    public Address removeAddress(Address address) {
        getAddressList().remove(address);
        return address;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }
}

4.2.2 表からのエンティティ作成に関する注意事項

データベース表からEJBエンティティを作成した後は、生成した注釈を手動で変更できます。 これは拡張トピックであるため、この章では説明しません。