Topics
Enterprise Architecture
Enterprise JavaBeans 3.0仕様入門
Pages:
1,
2,
3,
4,
5,
6
EJB 3.0のエンティティBeanは軽量の永続ドメインオブジェクトです。エンティティBeanは
@Entity注釈で明示され、エンティティBeanクラス内のプロパティとフィールドのうち、
@Transient注釈が付いていないものはすべて永続的とみなされます。エンティティBeanの永続フィールドは、JavaBean形式のプロパティを通じて、または単にpublic/protectedのJavaクラスフィールドとして公開されます。
エンティティBeanはその状態を表すためのヘルパクラスを使用できますが、これらのクラスのインスタンスは永続アイデンティティを持ちません。そ の代わり、それらのインスタンスの存在は、所有側のエンティティBeanインスタンスと強く結び付いています。また、これらのオブジェクトは複数のエン ティティ間で共有できません。
エンティティBeanにはホームインタフェースは不要です。
エンティティBeanにはビジネスインタフェースは不要です。その実装はオプションです。
単値の永続プロパティについて、メソッドシグネチャは次のようになります。
T getProperty()
void setProperty(T t)
次のコードサンプルで示すように、エンティティBeanには
@Entityタグの注釈が付きます。サンプルでは、いくつかのメンバー変数と、それらに対応するセッターおよびゲッターを定義しています。このコードサンプルでは、CMR関係(コンテナ管理による関係)に注釈を付ける方法も示しています。
1対多の関係は
@OneToManyタグを使って示します。この例では、
Customer Beanと
Orders Beanの間に1対多の関係があります(1人の顧客が複数の注文を出す可能性があります)。
同様に、
Customerは
Phones Beanとの間に多対多の関係を持ちます。一部のビジネスメソッドはビジネスインタフェースで定義され、Beanで実装されます。たとえば、
addPhone()は電話レコードを追加し、それを顧客と関連付けます。
@Entity
public class Customer implements Serializable {
private Long id;
private String name;
private Address address;
private Collection orders = new HashSet();
private Set phones = new HashSet();
// No-arg constructor
public Customer() {}
@Id
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@OneToMany
public Collection getOrders() {
return orders;
}
public void setOrders(Collection orders) {
this.orders = orders;
}
@ManyToMany
public Set getPhones() {
return phones;
}
public void setPhones(Set phones) {
this.phones = phones;
}
// Business method to add a phone number to the customer
public void addPhone(PhoneNumber phone) {
this.getPhones().add(phone);
// Set the phone's ref to this customer
phone.setCustomer(this);
}
}
}