データベース表にマップされるJPAエンティティを作成する最も簡単な方法は、エンティティ作成(表ベース)ウィザードを使用することです。 このウィザードでは、データベース接続の取得または作成、使用する表の選択、およびJPAエンティティの作成のプロセスが順にガイドされます。
エンティティ作成(表ベース)ウィザードは、新規ギャラリの「Business Tier」セクションから使用できます。
ヒント: 表からエンティティを作成するときは、複数のエンティティを同時に作成できます。 データベース内の表が外部キー制約で関連付けられている場合は、生成されたエンティティ内にフィールドが作成され、注釈が付けられます。 このため、通常は、すべてのエンティティを同時に生成する方法がベスト・プラクティスです。 |
表から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; } }