The detail of JPA 20

94,303 views

Published on

This presentation explains the feature of the JPA 2.0.

Published in: Technology, Business
0 Comments
21 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
94,303
On SlideShare
0
From Embeds
0
Number of Embeds
50,178
Actions
Shares
0
Downloads
197
Comments
0
Likes
21
Embeds 0
No embeds

No notes for slide

The detail of JPA 20

  1. 1. Java Persistence API の詳細ついて日本オラクル Fusion Middleware 製品事業統括本部シニア Java エバンジェリスト寺田 佳央 (http://yoshio3.com) 1 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  2. 2. 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。Oracleは、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。2 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  3. 3. はじめに3 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  4. 4. Java からの DB アクセス•  アプリケーションにとって非常に重要な部分 –  パフォーマンスを劣化させないように –  DBデータの整合性を失わない –  開発効率/メンテナンス性をどうやって高めるか•  どんな技術をお使いですか? –  JDBC –  EJB2.0 CMP Entity Bean –  JDO(Java Data Objects) –  O/Rマッピングツール … 4 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  5. 5. JDBC 抽象化レイヤ•  実際にはアプリケーションコードとDBアクセスコードを 分離するための抽象化レイヤを設けるのが一般的 –  アプリケーション側ではSQL/JDBCのコードを書かない –  Value Object (JavaBeans)でデータのやり取り•  自作フレームワーク –  SQLのパターンが少数の場合•  O/Rマッピングツール –  GUIによるマッピング定義 –  SQL自動生成 –  プラットフォーム移植性(DB、AS) 5 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  6. 6. Java からの DB アクセス•  O/R(Object-Relational)マッピングツール –  煩雑なJDBCコーディングなしでDBアクセスを 可能にするためのツール –  Javaクラスとテーブルの対応付け •  オブジェクト指向 vs 正規化 (インピーダンス・ミスマッチ) •  ORMツールにより設計思想のギャップを埋める –  プログラムミスによるリスクを回避•  代表的なORMツール –  Apache iBATIS –  Hibernate –  Oracle TopLink 6 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  7. 7. public Customer findCustomer(Integer id) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; Customer customer = null; ArrayList orders = null; try { conn = ds.getConnection(); pstmt = conn.prepareStatement( "SELECT C.ID, C.NAME, C.EMAIL, C.PHONE, " + "O.ID, O.PRODUCT, O.PRICE FROM CUSTOMER C, ORD O " + "WHERE C.ID = O.CID AND C.ID = ?"); pstmt.setInt(1, id.intValue()); rs = pstmt.executeQuery(); orders = new ArrayList(); int order_count = 0; while (rs.next()) { if (order_count == 0) { customer = new Customer(); customer.setId(new Integer(rs.getInt(1))); customer.setName(rs.getString(2)); @PersistenceContext( unitName="default" ) customer.setEmail(rs.getString(3)); EntityManager em; customer.setPhone(rs.getString(4)); } Order order = new Order(); order.setId(new Integer(rs.getInt(5))); public Customer findCustomer(Integer id) { order.setProduct(rs.getString(6)); return em.find( Customer.class, id ); order.setPrice(new Integer(rs.getInt(7))); order.setOwner(customer); } orders.add(order); order_count++; } customer.setOrders(orders); } catch (SQLException ex) { ex.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException ex) {} } return customer;} 7 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  8. 8. •  JDBC 直接の場合、考慮実装しなければならない事が多い 問合せ SQL パフォーマンスを劣化させる要因 ・クライアントごとに発生するDBアクセスの時間 ・接続プールからのJDBC接続の取得待ち ・Javaオブジェクトの生成コスト DB ・JavaオブジェクトのGCに要するコストクライアント 問合せ SQL キャッシュを使用することで ・DBアクセス回数の低減 ・JDBC接続の使用時間の短縮 ・生成したJavaオブジェクトの使い回し DBクライアント キャッシュ設定はクラス単位から ・静的データ 効果大 キャッシュ 商品、顧客 ・動的データ 効果小 8 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved. 発注情報、配送情報
  9. 9. Java Persistence API9 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  10. 10. JPA の主要コンポーネント10 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  11. 11. JPA の主要コンポーネント11 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  12. 12. JPA の構成要素 EntityManager API EntityPersistence Unit persist() Persistence.xml remove() find() … Persistence Context EntityManager Factory 12 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  13. 13. PersistenceUnitと設定ファイル EntityManager API EntityPersistence Unit persist() Persistence.xml remove() find() … Persistence Context EntityManager Factory 13 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  14. 14. Persistence Unit•  Persistence Unit –  EntityManagerのインスタンスを生成するファクトリを定義 –  EntityクラスをRDBにマッピングする設定 –  データベースへの接続用データソース設定 –  など•  persistence.xml 設定ファイル –  1つ以上の Persistence Unitを定義可能 –  @Entity アノテーションが付加されたクラスを検索 14 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  15. 15. Persistence.xml<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">! <persistence-unit name=”SamplePU" transaction-type="JTA">! <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>! <jta-data-source>jdbc/sample</jta-data-source>! <properties>! <property name="eclipselink.ddl-generation" value="create-tables"/>!    </properties>! </persistence-unit>!</persistence>! 15 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  16. 16. Persistence ContextとEntityManager EntityManager API Entity EntityPersistence Unit persist() Persistence.xml remove() find() … Persistence Context EntityManager Factory 16 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  17. 17. EntityManager•  EntityManager –  Entityのインスタンスのライフサイクルを管理するAPIを提供 –  永続化エンジンとプログラミングによる対話が可能 –  提供機能の例 •  ライフサイクル系操作:persist(), remove(), refresh(), merge() •  検索系処理:find(), getReference() •  クエリの発行系:createQuery() createNamedQuery(), createNativeQuery() •  Persistence Contextの管理系:flush(), clear(), close(), getTransaction() 17 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  18. 18. Persistence Context•  Persistence Context –  管理する Entity の集合 –  1つの Persistence Unit に属する 18 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  19. 19. Persistence ContextとEntityManager EntityManagerで EntityManager 管理されるEntity persist() remove()Servlet refresh()EJB merge()Javaアプリ find() createQuery() contains() Persistence detach() Context lock()19 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  20. 20. Persistence ContextとEntityManager•  2種類のEntityManager –  コンテナ管理のEntityManager : Java EE コンテナで使用 –  アプリケーション管理のEntityManager:Java SE/EE で使用•  2種類のPersistence Context –  トランザクションスコープのPersistence Context –  Extended Persistence Context 20 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  21. 21. コンテナ管理のEntityManager•  Java EE コンテナによって管理•  DI/JNDI によりEntityManagerインスタンスを取得 –  @PersistenceContext EntityManager entityManager; 21 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  22. 22. コンテナ管理のEntityManager @Stateless! public class MyEnterpriseBean {! @PersistenceContext(unitName = ”MYJPA_PU")! private EntityManager em;!! public void createMyEntity(Customer customer) {! em.persist(customer);! }! コンテナがトランザクションを管理 }! コミット、ロールバック等は自動的に実施 22 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  23. 23. アプリケーション管理のEntityManager•  EntityManagerFactoryから生成 –  EntityManager em = emf.createEntityManager();•  アプリケーションでライフサイクルを管理•  Java SE 環境で利用可能•  Extended Persistence Contextの使用が必須•  JTA(Web)もしくはRESOURCE_LOCAL(Java SE)のトラ ンザクションタイプを使用 23 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  24. 24. アプリケーション管理のEntityManager EntityManagerFactory emf = ! Persistence.createEntityManagerFactory(”MYJPA_PU");! EntityManager em = emf.createEntityManager();! EntityTransaction tx = em.getTransaction();!! tx.begin();! em.persist(customer);! tx.commit();!! em.close();! アプリケーションでトランザクションを管理 emf.close();! コミット、ロールバック等の実装が必要 24 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  25. 25. Persistence を実現するための概念 PersistenceUnit 設定 EntityManager Factory 生成 管理 EntityManager PersistenceContext 25 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  26. 26. Entity EntityManager API EntityPersistence Unit persist() Persistence.xml remove() find() … Persistence Context EntityManager Factory 26 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  27. 27. Entity とテーブルのかんたんなマッピング管理下にない場合は単なるPOJO @Entity! DBのテーブル public class Customer implements Serializable {! @Id! private Long id;! private String address1;! private long age;! private String name;! private String telephone;! //セッタ・ゲッタ }!! Entity クラス 27 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  28. 28. 必要時のみデフォルト設定を上書きする手法 (Configuration By Exception) @Entity! ORACLE_CUSTOMERテーブル @Table(name=“ORACLE_CUSTOMER”)! にマッピング public class Customer implements Serializable {! @Id! private Long id;! private String address1;! private long age;! private String name;! private String telephone;! //セッタ・ゲッタ }!! 28 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  29. 29. デフォルトのカラム設定を上書き @Entity! public class Customer implements Serializable {! @Id! private Long id;! @NotNull //入力必須! @Size(min = 1, max = 512) //入力サイズの変更! @Column(name = ”FULL_ADDRESS“) //デフォルトのカラム名をFULL_ADDRESSに変更! private String address1;! private long age;! private String name;! private String telephone;! //セッタ・ゲッタ }!! 29 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  30. 30. LAZY LOAD(遅延読み込み) @Entity! public class Customer implements Serializable {! @Id!     private Long id;!     private String address1;! private long age;! private String name;! private String telephone;! @Basic(fetch = FetchType.LAZY)//写真の取得要求があるまで遅らせる! @Lob! private byte[] picture;! }! 30 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  31. 31. @Temporal(日付、時刻) @Entity! public class Customer implements Serializable {! @Id!     private Long id;!     private String address1;! private long age;! private String name;! private String telephone;! @Temporal(TemporalType.DATE) //DATE型を使用! private Date dateOfBirth;! @Temporal(TemporalType.TIMESTAMP) //TIMESTAMP型を使用! private Date creationDate;! }! 31 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  32. 32. 組み込み可能コレクション @Embeddable! public class Address{! private String street;! private String town;! private String city;! private String prefecture;! }!! @Entity! public class Person {! …! @ElementCollection! private Set<Address> addresses;! }!!32 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  33. 33. Entity のライフサイクルEntityの生成(new MyEntity()) tx.commit() デタッチ状態の tx.rolleback() Entity 管理状態の 管理状態の em.merge() em.persist() Entity Entity tx.reflesh() 管理状態の Entity Persistence Context tx.flush() em.remove() tx.commit() 削除された 33 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved. Entity
  34. 34. Entity のライフサイクル EntityManagerFactory emf = ! Persistence.createEntityManagerFactory(”MYJPA_PU");! EntityManager em = emf.createEntityManager();! EntityTransaction tx = em.getTransaction();! Customer customer = new Customer(); //Entityの生成! tx.begin();! em.persist(customer); //管理状態のEntity! tx.commit(); //デタッチ状態になるEntity! //JavaのHeapにはcustomerは存在するが、JPAの管理状態から外れデタッチ状態! //この状態でcustomerにたいする操作を行った場合は、merge()で同期! em.close();! emf.close();! 34 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  35. 35. クエリの実行方法35 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  36. 36. Entity と ID を使用した検索 Customer customer = em.find(Customer.class, 1234L)! if (customer!= null) {! //オブジェクトを処理する } try {! Customer customer = ! em.getReference(Customer.class, 1234L)! //オブジェクトを処理する } catch(EntityNotFoundException ex) {! //エンティティが見つからない }! 36 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  37. 37. Entity の生成と削除Customer customer = ! new Customer(”Taro", ”Yamada", ”taro.yamada@mail.com");!tx.begin();!em.persist(customer);!tx.commit();!tx.begin();!em.remove(customer);!tx.commit();! 37 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  38. 38. JPQL(Java Persistence Query Language)•  SQLに類似したクエリ言語•  Entity を使用したクエリ表現•  select, update, delete などの機能を提供•  データベースに非依存 SELECT c FROM Customer c! FROM 句で別名を作成 結果は Customer インスタンス 38 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  39. 39. JPQLクエリ (SELECT 句の例)SELECT c FROM Customer c WHERE c.lastName = ’Yamada!Customer 苗字が ’Yamada’ に一致する0件以上のインスタンスの取得 SELECT c.firstName FROM Customer c!Customer 名の文字列、もしくは文字列のコレクションを取得 SELECT c.firstName, c.lastName FROM Customer c!Customer 氏名共に取得 39 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  40. 40. JPQLクエリ (WHERE 句の例)SELECT c FROM Customer c!WHERE c.firstName = ’Taro AND c.address = ’Tokyo!AND, OR でクエリをさらに限定SELECT c FROM Customer c WHERE c.age > 18!SELECT c FROM Customer c!WHERE c.age NOT BETWEEN 40 AND 50!WHERE句で =, >, >=, <, <=, <>, (NOT) BETWEEN, (NOT) LIKE, (NOT) IN, IS(NOT) NULL, IS (NOT) EMPTY, (NOT) MEMBER (OF) などの比較演算子を利用可能 40 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  41. 41. JPQLクエリ (パラメータの動的バインド例)SELECT c FROM Customer c!WHERE c.firstName = ?1 AND c.address = ?2!? (疑問符)の後に整数を指定 → 実行時引数の番号SELECT c FROM Customer c!WHERE c.firstName = :fname AND c.address = :address!: (セミコロン)の後に名前を指定 → 実行時引数の名前 41 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  42. 42. JPQLクエリ (パラメータの動的バインド例) TypedQuery<Customer> query = ! em.createQuery(! "SELECT c FROM Customer c WHERE c.name = ?1”,Customer.class);! query.setParameter(1, name);! TypedQuery<Customer> query = ! em.createQuery(! "SELECT c FROM Customer c WHERE c.name = :name”,Customer.class);! query.setParameter(“name”, name);!Query#setParameter(position,value)でクエリの引数に代入 42 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  43. 43. JPQL(サブクエリ、オーダ)SELECT c FROM Customer c!WHERE c.age = (SELECT MIN(cust. age) FROM Customer cust)!WHERE句またはHAVING句の条件式に埋め込むSELECTSELECT c FROM Customer c WHERE c.age > 18 ORDER BY c.age DESC!クエリによって得られる結果のソート (ASC: 昇順、DESC: 降順) 43 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  44. 44. ANSI SQL-92 CASE Expression 対応 •  検索結果を変更したい場合、テーブル定義の変更ができ ない場合に有効 •  CASE –  CASE{WHEN <cond_exp> THEN <scalar_expr>} + ELSE <scalar_exp> END •  COALESCE –  COALESCE(<scalar_exp> {,<scalar_expr>} + ) •  NULLIF –  NULLIF(<scalar_expr1>, <scalar_expr2>) 44 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  45. 45. CASE 式のサンプル勤務評価に応じた給料の昇給 UPDATE Employee e! SET e.salary =! CASE e.rating ! WHEN 1 THEN e.salary * 1.2! WHEN 2 THEN e.salary * 1.1! •  社員の評価レートが1の場合基 ELSE e.salary * 1.02! 本給の1.2倍 END! •  社員の評価レートが2の場合基本 給の1.1倍 •  それ以外は、1.02倍 45 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  46. 46. データの一括操作DELETE FROM Customer c WHERE c.age < 18!一括削除 (EntityManager#remove()より効率的)UPDATE Customer c SET c.firstName = TOO YOUNG’ WHERE c.age < 18!一括更新 (EntityManager#remove()より効率的) 46 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  47. 47. プログラミングによるクエリ(Criteria API)•  クエリーの制御をJavaオブジェクトで制御 –  JPA1.0ではJPQL/Native SQLでクエリーを記載 –  JPQLで可能なことはプログラム上で実現可能•  Criteria APIはクエリー実行結果の型の安全性が向上 –  クエリー実行におけるランタイムエラーの発生率が減少 –  統合開発環境の型チェックを利用し安全に実装可能•  JPQLはSQLに精通した開発者に有効 –  統合開発環境が自動的に雛形を生成(開発効率の向上) –  開発者に選択肢を提供•  オブジェクトベース、文字列ベースのクエリーを提供 47 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  48. 48. Criteria API•  CriteriaBuilder : –  CriteriaQueryオブジェクトを生成するファクトリ –  EntityManager#getCriteriaBuilder()より取得•  CriteriaQuery : –  クエリーの実行結果の型を返す –  <T> CriteriaQuery<T> createQuery(Class<T> resultClass)•  Root : –  クエリーの範囲指定•  その他 –  Join, ListJoin, MapJoin, Path, Subqueryなど 48 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  49. 49. Criteria API実装と対応するJPQLEntityManager em = … ;!CriteriaBuilder cb = em.getCriteriaBuilder();!CriteriaQuery<Person> p = cb.createQuery(Person.class);!Root<Person> person = p.from(Person.class);!p.select(person).where(! cb.equal(person.get(“name”),”Taro Yamada”));!対応する JPQL 文SELECT p FROM Person p WHERE p.name = Taro Yamada 49 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  50. 50. Metamodel API•  強力な型チェックを可能 –  ランタイムエラーの排除 •  文字列によるエンティティの属性へのアクセスを排除 –  コンパイル時に属性の有無、型チェックを実施•  Metamodelクラスの生成 –  _を付加した正規化したMetamodelクラスを生成 –  IDEで自動生成(※NetBeans は Ver 7.0 より)•  プログラム上で動的に生成 50 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  51. 51. Metamodel APIを使用しない場合の潜在的問題点EntityManager em = … ;!CriteriaBuilder cb = em.getCriteriaBuilder();!CriteriaQuery<Person> p = cb.createQuery(Person.class);!Root<Person> person = p.from(Person.class);!p.select(person).where(! cb.equal(person.get(“nema”),”Taro Yamada”));!name と入力すべき所を nema とタイプミスランタイムエラーが発生 51 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  52. 52. Person Entity にたいする Metamodel (Person_)@Entity! import! javax.persistence.metamodel.SingularAttrib ute;!public class Person {! @javax.persistence.metamodel.StaticMetaMod @Id! el(Person.class)! @GeneratedValue(strategy = ! public class Person_ {!    GenerationType.AUTO)! public static volatile private Long id;! SingularAttribute<Person,Long> id;! private String name;! public static volatile Private Integer age;! SingularAttribute<Person,String> name;!}! public static volatile SingularAttribute<Person,Integer> age;! }! 統合開発環境で自動生成されるMetamodel 52 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  53. 53. Metamodel クラスを利用して実装した例 EntityManager em = … ;! CriteriaBuilder cb = em.getCriteriaBuilder();! CriteriaQuery<Person> p = cb.createQuery(Person.class);! Root<Person> person = p.from(Person.class);! p.select(person).!   where(cb.equal(person.get(Person_.name),”Taro Yamada”));!Person_.name は属性名でコンパイラがチェック可能仮に Person_.nema と入力した場合コンパイルエラーが発生これによりランタイムエラーの発生頻度を抑制可能 53 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  54. 54. 実際に作って 見ましょう54 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  55. 55. NetBeans 7.0 or 7.1 55 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  56. 56. サービス→JavaDBの確認(GlassFish付属のDB)56 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  57. 57. 新規Mavenプロジェクト生成57 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  58. 58. 新規Mavenプロジェクト生成58 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  59. 59. 既存DBからEntityを自動生成59 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  60. 60. 既存DBからEntityを自動生成60 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  61. 61. 既存DBからEntityを自動生成61 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  62. 62. 既存DBからEntityを自動生成62 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  63. 63. 既存DBからEntityを自動生成63 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  64. 64. 既存DBからEntityを自動生成64 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  65. 65. 既存DBからEntityを自動生成65 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  66. 66. 既存DBからEntityを自動生成66 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  67. 67. 自動生成されたPersistenceUnitの確認(persistence.xml)67 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  68. 68. PersistenceUnit 名の変更jp.co.oracle.jpa_JPAWebApplication_war_1.0-SNAPSHOTPUからJPA_SAMPLE_PUに変更 68 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  69. 69. Entity からセッション Bean の作成69 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  70. 70. Entity からセッション Bean の作成70 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  71. 71. Entity からセッション Bean の作成71 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  72. 72. 自動生成された AbstractFacade コンテナ管理のトランザクションのため プログラムによるトランザクション制御は不要72 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  73. 73. 自動生成された CustomerFacade73 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  74. 74. JPA 2.1 マルチテナンシー•  インスタンス・レベル•  スキーマ・レベル•  レコード(同一テーブル)・レベル Linda DeMichie (Java EE Spec Lead) 74 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  75. 75. Eclipse Link 2.3 (Indigo) Multi Tenancy Support@Multitenant@TenantDiscriminatorColumn75 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  76. 76. JPA におけるマルチテナンシーの1例 同一アプリケーション テナントID : Oracle テナントID : Foo76 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  77. 77. Entity クラス77 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  78. 78. アプリケーションのコピー&テナントIDの変更 テナント A 用の設定アプリケーションの実装コードは テナント B 用の設定一切変更無し 78 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  79. 79. Java Persistence API の詳細ついて日本オラクル Fusion Middleware 製品事業統括本部シニア Java エバンジェリスト寺田 佳央 (http://yoshio3.com) 79 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.

×