データベース表にマップされる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;
}
}