EJB/ JPA

Java Persistence API

【*】登場人物
+エンティティ
 Javaクラスをアノテーションが設定ファイルで定義
+エンティティ・マネージャ
 JPA提供のIF
 エンティティの取得や永続化を担当
+永続コンテキスト
 メモリ上のエンティティの集合
 JPAの実装で管理される
EJB QL
 エンティティを取得する為の問い合わせ言語

【*】さんぷる
--------------------
pkg hoge;
impt javax.persistence.Entity;
impt javax.persistence.GeneratedValue;
impt javax.persistence.Id;

@Entity
public class Employee {//final指定しないこと

 public Employee() {}//引数なしコンストラクタの用意
 public Employee(Str name, long salary) {
  this.name = name;
  this.saraly = salary;
 }

 @Id//means primaryKey
 @GeneratedValue//means generating primaryKey automatically
 private Long id;
 private String name;
 private long salary;//dont def field as final

 public Long getId() {return id;}//doesnt need setter cuz its generated automatically.

 public String setName() {return name;}
 public void setName(String name) {this.name = name;}

 public String toString() {
  return getId() + ", " + getname() + ", " + getSalary();
 }
}
--------------------

【*】EntityManager
エンティティの取得や永続化等エンティティのライフサイクルの制御を担当

【+】エンティティのライフサイクル
*new
 プログラム上で新規に生成されたエンティティの状態
 プライマリキーなし
 永続コンテキストとの関連付けなし
*managed
 プライマリキーあり
 永続コンテキストと関連付け済み
 managedEntityに対する変更は自動的に検出され
 トランザクションのコミット時にDBに反映される
*detacked
 プライマリキーあり
 永続コンテキストとの関連付けなし
 managedEntityは永続コンテキストが終了で分離された状態になる
 永続コンテキストはデフォルトでは
 トランザクションの終了で自身も終了する
*removed
 プライマリキーあり
 永続コンテキストと関連付け済み
 DBからの削除が予定された状態
 実際の削除はトランザクションのコミット時

【*】さんぷる
--------------------
pkg hoge;
impt java.util.List;
impt javax.ejb.Stateless;
impt javax.persistence.EntityManager;
impt javax.persistence.PersistenceContext;

@Stateless
public class EmplyeeDaoBean impl EmployeeDao {

 @PersistenceContext
 private EntityManager entityManager;

 public void setEntityManager(EntityManagerr em) {
  this.entityManager = em;
 }

 public List getAllEmployees() {
  return entityManager.createQuery("select e from Employee e").getResultList();
 }

 public Employee create(String name, Long salary) {
  Employee e = new Employee(name, salary);
  //persist-method
  //making the new entity managerdEntity.
  entityManager.persist(e);//the timing to insert into DB.
  return e;
 }

 public void updateSalary(Loing id, Long newSalary) {
  //find-method
  //searching with primaryKey.
  //it returns a managedEntity.
  Employee e = entityManager.find(Employee.class, id);
  e.setSalary(newSalary);
 }

 public void update(Employee employee) {
  //merge-method
  //merging the detachedEntity with persistenceContext,
  //and making it managedEntity.
  Employee managed = entityManager.merge(employee);
 }

 public void remove(Long id) {
  Employee e = entityManager.find(Enployee.class, id);
  //remove-method
  //deleting the entity.
  entityManager.remove(e);
 }
}
--------------------
pkg hoge;
impt java.util.List;
impt javax.ejb.Local;

@Local
public interface EmployeeDao {
 List getAllEmployees();
 Employee create(String name, long salary);
 void update(Employee employee);
 void updateSalary(Long id, long newSalary);
 void remove(Long id);
}
--------------------
pkg hoge;
impt java.util.List;
impt javax.naming.InitialContext;
impt org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;

public class Main {
 public static void main(String[] args) throws Exception {
  EJB3StandaloneBootstrap.boot(null);
  EJB3StandaloneBootstrap.scanClasspath();

  InitialContext ctx = new initialContext();
  EmployeeDao empDao = (EmployeeDao) ctx.lookup("EmployeeDaoBean/local");

  syso("### 1.追加 ###");
  empDao.updateSalary(emp.getId(), 100000);
  display(empDao.getAllEmployees());

  syso("### 2.更新 ###");
  empDao.updateSalary(emp.getId(), 200000);
  display(empDao.getAllEmployees());

  syso("### 3.更新(マージ) ###");
  emp.setSalary(300000);
  empDao.update(emp);
  display(empDao.getAllEmployees());

  syso("### 4.削除 ###");
  empDao.remove(emp.getId());
  display(empDao.getAllEmployees())+

  EJB3StandaloneBootstrap.shutdown();
 }

 private static void display(List employees) {
  for (Employee emp : employees) {
   syso(emp);
  }
 }
}
--------------------

ref:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060627/241918/

tag : Java Persistence API JPA EJB

2009-02-20 21:12 : __j2ee__ejb : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud