Your SlideShare is downloading. ×
0

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

The detail of JPA 20

73,938

Published on

This presentation explains the feature of the JPA 2.0.

This presentation explains the feature of the JPA 2.0.

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

No Downloads
Views
Total Views
73,938
On Slideshare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
163
Comments
0
Likes
15
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Java Persistence API の詳細ついて日本オラクル Fusion Middleware 製品事業統括本部シニア Java エバンジェリスト寺田 佳央 (http://yoshio3.com) 1 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 2. 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。Oracleは、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。2 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 3. はじめに3 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. 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. 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. 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. •  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. Java Persistence API9 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 10. JPA の主要コンポーネント10 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 11. JPA の主要コンポーネント11 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. 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. 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. 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. 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. 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. Persistence Context•  Persistence Context –  管理する Entity の集合 –  1つの Persistence Unit に属する 18 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. 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. コンテナ管理のEntityManager•  Java EE コンテナによって管理•  DI/JNDI によりEntityManagerインスタンスを取得 –  @PersistenceContext EntityManager entityManager; 21 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. アプリケーション管理の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. アプリケーション管理の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. Persistence を実現するための概念 PersistenceUnit 設定 EntityManager Factory 生成 管理 EntityManager PersistenceContext 25 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. 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. 必要時のみデフォルト設定を上書きする手法 (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. デフォルトのカラム設定を上書き @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. 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. @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. 組み込み可能コレクション @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. 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. 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 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. データの一括操作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. プログラミングによるクエリ(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. 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. 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. Metamodel API•  強力な型チェックを可能 –  ランタイムエラーの排除 •  文字列によるエンティティの属性へのアクセスを排除 –  コンパイル時に属性の有無、型チェックを実施•  Metamodelクラスの生成 –  _を付加した正規化したMetamodelクラスを生成 –  IDEで自動生成(※NetBeans は Ver 7.0 より)•  プログラム上で動的に生成 50 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. 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. 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 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 55. NetBeans 7.0 or 7.1 55 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 56. サービス→JavaDBの確認(GlassFish付属のDB)56 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 57. 新規Mavenプロジェクト生成57 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 58. 新規Mavenプロジェクト生成58 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 59. 既存DBからEntityを自動生成59 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 60. 既存DBからEntityを自動生成60 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 61. 既存DBからEntityを自動生成61 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 62. 既存DBからEntityを自動生成62 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 63. 既存DBからEntityを自動生成63 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 64. 既存DBからEntityを自動生成64 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 65. 既存DBからEntityを自動生成65 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 66. 既存DBからEntityを自動生成66 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 67. 自動生成されたPersistenceUnitの確認(persistence.xml)67 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 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. Entity からセッション Bean の作成69 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 70. Entity からセッション Bean の作成70 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 71. Entity からセッション Bean の作成71 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 72. 自動生成された AbstractFacade コンテナ管理のトランザクションのため プログラムによるトランザクション制御は不要72 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 73. 自動生成された CustomerFacade73 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 74. JPA 2.1 マルチテナンシー•  インスタンス・レベル•  スキーマ・レベル•  レコード(同一テーブル)・レベル Linda DeMichie (Java EE Spec Lead) 74 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 75. Eclipse Link 2.3 (Indigo) Multi Tenancy Support@Multitenant@TenantDiscriminatorColumn75 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 76. JPA におけるマルチテナンシーの1例 同一アプリケーション テナントID : Oracle テナントID : Foo76 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 77. Entity クラス77 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 78. アプリケーションのコピー&テナントIDの変更 テナント A 用の設定アプリケーションの実装コードは テナント B 用の設定一切変更無し 78 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.
  • 79. Java Persistence API の詳細ついて日本オラクル Fusion Middleware 製品事業統括本部シニア Java エバンジェリスト寺田 佳央 (http://yoshio3.com) 79 | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved.

×