EJB 3.0エンティティBeanについて

EJB 3.0のCMPエンティティBeanは、Oracle TopLinkおよびHibernateのような軽量永続性モデルを採用します。

EJB 3.0エンティティBeanへの主な拡張機能は、次のとおりです。

エンティティBeanはPOJO

エンティティBeanはPOJOであり、コンポーネント・インタフェースは不要です。エンティティBeanは、継承およびポリモフィズムもサポートしています。

単純なエンティティBeanのソース・コードを次に示します。

@Entity
@Table(name = "EMP")
public class Employee implements java.io.Serializable
{
  private int empNo;
  private String eName;
  private double sal;
  @Id
  @Column(name="EMPNO", primaryKey=true)
    public int getEmpNo()
    {
      return empNo;
    }
  public void setEmpNo(int empNo)
  {
    this.empNo = empNo;
  }
  public double getSal()
  {
    return sal;
  }
  ...
}     

Beanクラスは、CMP 2.xエンティティBeanの場合と同様に、抽象クラスではなく具体的なクラスであることに注意してください。

O-Rマッピングのメタデータ注釈

O-Rマッピング注釈を使用すると、ユーザーは、O-Rマッピング・メタデータを使用してEJB 3.0エンティティBeanクラスを記述できます。その後、このメタデータは、エンティティBeanの永続性および取得を定義するために使用されます。つまり、ベンダー固有のディスクリプタでO-Rマッピングを定義する必要はなくなります。

前述の例では、エンティティBeanの基礎となるデータベース表と列名の指定に@Tableおよび@Column注釈を使用しています。マッピング注釈を使用して、エンティティ間の関連を定義することもできます。次に例を示します。

@ManyToOne(cascade=PERSIST, fetch=LAZY)
@JoinColumn(name="MANAGER_ID", referencedColumnName="EMP_ID")
public Employee getManager()
{
  return manager;
}     

使用できるマッピング注釈のリストは、マッピング注釈の使用方法を参照してください。

継承およびポリモフィズムのサポート

継承は、様々な使用例で非常に役に立ちます。一般的に使用され、Oracle Application Server EJB 3.0 Previewでサポートされる2つのタイプの継承は、次のとおりです。

継承は、注釈を使用して表されます。結合されたサブクラス方針を使用するコード例を次に示します。

@Entity
@Table(name="EJB_PROJECT")
@Inheritance(strategy=JOINED, discriminatorValue="P")
@DiscriminatorColumn(name="PROJ_TYPE")
public class Project implements Serializable
{
  ...
}
@Entity
@Table(name="EJB_LPROJECT")
@Inheritance(discriminatorValue="L")
public class LargeProject extends Project
{
  ...
}
@Entity
@Table(name="EJB_PROJECT")
@Inheritance(discriminatorValue="S")
public class SmallProject extends Project
{
  ...
}     

CRUD操作のためのEntityManager APIの簡素化

javax.persistence.EntityManager APIは、エンティティBeanインスタンスの作成、検索、更新および削除に使用されます。エンティティBeanインスタンスを参照して操作するために、複雑なコードを記述する必要はなくなります。次のコードのように、セッションBeanにEntityManagerのインスタンスを挿入し、EntityManagerインスタンスでpersistまたはfindメソッドを使用して、エンティティBeanオブジェクトを作成または問い合せることができます。

@Inject
private EntityManager em;
private Employee emp;
  public Employee findEmployeeByEmpNo(int empNo)
  {
    return ((Employee) em.find("Employee",empNo));
  }
  public void addEmployee(int empNo, String eName, double sal)
  {
    if (emp == null) emp = new Employee();
    emp.setEmpNo(empNo);
    .......
    em.persist(emp);
  }
}     

問合せの拡張機能

問合せは、デプロイメント・ディスクリプタで定義されるのではなく、メタデータを使用してエンティティBean自体で定義されます。EJB 3.0は、バルク更新および削除のサポートなど、EJBQLの様々な制限に対応しています。ネイティブSQL問合せのサポートも追加されました。


関連項目

EJBについて
Enterprise JavaBeansおよびJDeveloperについて