EntityManager と EJB QL EJB 3.0 コース 第8回 2006年8月5日.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
S2.4 & S2EJB3Unit 中村( taedium ). Seasar 2.4 の特徴 1 Sesar 2.4 は EJB 3.0 を実 装しています。 EJB 3.0 の仕様は 5 月 12 日に Final Release されたばかりの新しい技 術です。
WebサービスII (第12回)‏ 2007年12月19日 植田龍男.
Apache Camel Data Format Component Apache Camel
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
JPAを利用した RESTful Webサービスの開発
Relation Mapping EJB 3.0 コース 第9回 2006年8月6日.
~手続き指向からオブジェクト指向へ(Ⅰ)~
Apache Camel Data Format Component Apache Camel
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
WebサービスII (第10回) 2007年11月28日 植田龍男.
エンタープライズアプリケーション II 第10回 / 2006年7月23日
Apache Camel Data Format Component Apache Camel
SQL J2EE I 第3回 /
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
エンタープライズアプリケーション II 第7回 / 2006年7月9日
RMI ソフトウェア特論 第6回 /
~手続き指向からオブジェクト指向へ[Ⅱ]~
Stateful Session Beans
第12回 2007年7月13日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
アプリケーションに応じた AOP による高速化が可能な 永続システム
JDBC J2EE I 第4回 /
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
2006年度 東京サテライト校 エンタープライズ・アプリケーション II
JDBC データベース論 第12回.
Javaによる Webアプリケーション入門 第7回
Jakarta Struts (2) ソフトウェア特論 第11回.
Java8について 2014/03/07.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
Javaによる Webアプリケーション入門 第11回
ソフトウェア制作論 平成30年11月21日.
アプリケーション依存の先読みが可能なO/Rマッピングツール
JDBC J2EE I (データベース論) 第5回 /
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
JSFによるWebアプリケーション開発 第3回
JDBC ソフトウェア特論 第3回.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第8回
Javaによる Webアプリケーション入門 第4回
コレクション・フレームワーク J2EE I (データベース論) 第6回 /
Annotation EJB 3.0 コース 第3回 2006年8月4日.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
Action Method の実装 J2EE II 第9回 2004年12月2日.
稚内北星学園大学 情報メディア学部 安藤 友晴
Jakarta Struts (1) ソフトウェア特論 第10回.
クラスの追加 メソッドの追加 TestCaseの追加 Test Methodの追加.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
やさしく理解するはじめてのJPA JPAの使い方 川場 隆 活水女子大学. やさしく理解するはじめてのJPA JPAの使い方 川場 隆 活水女子大学.
Project GlassFish と Java Pet Store
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
SQL J2EE I (データベース論) 第3回 /
JSFによるWebアプリケーション開発 第7回
SQL データベース論 第11回.
Presentation transcript:

EntityManager と EJB QL EJB 3.0 コース 第8回 2006年8月5日

ここでの目標 Entity Manager の使いかたと EJB QL について理解する。

EntityManagerの利用

EntityManager と @PersistenceContext private EntityManager em; EntityManager は、データの永続管理を受け持つオブジェクト。データベースと接続して、さまざまな処理を行う。 @PersistenceContext は、Dependency Injection (依存性注入)を行うためのアノテーション。EntityManager は、コンテナによって依存性注入される。

EntityBeanのライフサイクル (1) Persistence Identity EntityBeanのインスタンスを識別するためのもの データベースのテーブル中の主キーと対応する @Idアノテーションで修飾されたプロパティ

EntityBeanのライフサイクル (2) Persistence Identity を 持つかどうか Persistence Context との結びつき new 持たない 結びついていない managed 持つ 結びついている detached (以前は結びついていた) removed (DBから削除予定)

EntityBeanのライフサイクル (3) 新しくEntityBeanが生成された → new EntityManager#persist を実行 → managed Persistence Context との関係性がなくなった (= データベースとの関係性がなくなった) → detached EntityManager#merge(detachedなEntityBean) → managed EntityManager#remove を実行 → removed

EntityManager#find public Employee findEmployeeByEmpNo(int empNo) { return ((Employee) em.find("Employee",empNo)); } EntityManager の find メソッドは、データベースからempNo という主キーで指定したデータを検索し、検索結果として Employee オブジェクトを返す。

EntityManager#persist public void addEmployee(int empNo, String eName, double sal) { Employee emp = new Employee(); emp.setEmpNo(empNo); emp.setEname(eName); emp.setSal(sal); em.persist(emp); } EntityManager の persist メソッドで、Entity Bean を永続化している。つまり、データをデータベースで管理するようにしている。 new から managed に

EntityManager#remove @Stateless public class EmployeeDemoSessionEJB implements EmployeeDemoSession { public void removeEmployee(Integer employeeId) { Employee employee = (Employee)em.find("Employee", employeeId); em.remove(employee); } EntityManager の remove メソッドで、データベースで管理されているオブジェクトを削除できる。 removed にする

データベースの更新 (1) // EmployeeClient.java より Employee emp3 = ef.findEmployeeByEmpNo(empNo); emp3.setSal(100000); クライアントプログラムでEmployeeの内容を変化させても、データベースには反映されない。 SesionFacadeから渡されているemp3は、detached になっている。

データベースの更新 (2) このようにしてみる // EmployeeClient.java より Employee emp3 = ef.findEmployeeByEmpNo(empNo); emp3.setSal(100000); ef.updateEmployee(emp3); // EmployeeFacadeBean.java より // detouched な EntityBean が managed に public void updateEmployee(Employee emp) { em.merge(emp); }

データベースの更新 (3) 別解 // EmployeeClient.java ef.setSal(1, 50.0); // EmployeeFacadeBean.java // Facadeの中で find したものを操作すればOK public void setSal(int empNo, Double sal) { emp = (Employee)em.find(Employee.class, empNo); emp.setSal(sal); }

Java Persistence Query Language

Java Persistence Query Language とは何か Java Persistence API でデータベースを操作するためのクエリー言語 オブジェクトをそのまま利用できる データベースに依存しないかたちでクエリーを記述できる 旧来の “EJB QL” を拡張したもの

例1 // Employee のコレクションを返す public Collection<Employee> findAllEmployees() { Collection<Employee> employees = em.createQuery( "SELECT employee FROM Employee employee” ).getResultList(); return employees; }

例2 // パラメータの設定 public Collection<Employee> findEmployeesByLastName(String lastName) { Collection<Employee> employees = em.createQuery( "SELECT employee FROM Employee employee WHERE employee.lastName = :lastname") .setParameter("lastname", lastName) .getResultList(); return employees; }

例3 // UPDATEやDELETEも使える public int changeCityName(String oldName, String newName) { int result = em.createQuery( "UPDATE address SET address.city = :newName WHERE address.city = :oldName") .setParameter("newName", newName) .setParameter("oldName", oldName) .executeUpdate(); return result; }

例4 // クエリーをあらかじめ用意 @NamedQuery( name="findProjectByName", queryString="SELECT project FROM Project project WHERE project.name = :name" ) public class ... { Project proj = (Project)em.createNamedQuery("findProjectByName") .setParameter("name", name) .getSingleResult(); }