• 検索結果がありません。

Microsoft PowerPoint - sc2007spring_Aa1_Kuina.ppt

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - sc2007spring_Aa1_Kuina.ppt"

Copied!
60
0
0

読み込み中.... (全文を見る)

全文

(1)

Seasar Conference

Seasar Conference

Seasar Conference

Seasar Conference

Seasar Conference

Seasar Conference

Seasar Conference

Seasar Conference

2007 Spring

2007 Spring

2007 Spring

2007 Spring

2007 Spring

2007 Spring

2007 Spring

2007 Spring

Kuina

Kuina

-

-

Dao

Dao

入門

入門

入門

入門

入門

入門

入門

入門

2007.05.27

中村年宏

(2)

自己紹介

自己紹介

• 名前:中村年宏

– ブログ:http://d.hatena.ne.jp/taedium/

• コミッタとして参加しているプロジェクト

– S2Container

– Kuina-Dao

– S2Hibernate

– S2TopLink (sandboxプロジェクト)

– S2OpenJPA (sandboxプロジェクト)

– S2Cayenne (sandboxプロジェクト)

(3)

アジェンダ

アジェンダ

• Kuina-DaoとJPA

• Kuina-DaoとS2Dao

• Kuina-Daoの使いどころ

• Kuina-Daoの使いどころ アドバンスド

• ロードマップ

(4)

Kuina

Kuina

-

-

Dao

Dao

JPA

JPA

Kuina

(5)

JPA

JPA

とは

とは

• Javaの

標準

O/Rマッピング仕様

– J

ava

P

ersistence

A

PI

– Java SE環境で利用可能

• 代表的なJPA実装プロダクト

– Hibernate

– TopLink Essentials

• 特徴

– Java SE 5.0が必須

– アノテーションによるマッピング

– 永続コンテキスト

– 標準

• ツールのサポートを受けやすい

• 情報量が豊富

• 導入の障壁が低い

(6)

Kuina

Kuina

-

-

Dao

Dao

とは

とは

• Java Persistence API(JPA)を使いやすくするためのDAOフ

レームワーク

– 「くいなだお」

http://kuina.seasar.org/ja/index.html

– 現在のバージョンは1.0

• JPAの実装であるHibernateやTopLink Essentialsと

組み合わ

て使う

– 今後はOpenJPAやCayenneとの連携もサポート予定

– Kuina-Coreは現在構想中

• メリット

– コードの削減

(7)

コード例

コード例

public class EmpDao {

@PersistenceContext

private EntityManager em;

public Emp findByEmpNo(Integer empNo) {

return (Emp)em.createQuery(“SELECT e FROM Emp e WHERE e.empNo >= :empNo”

ORDER BY empNo)

.setParameter(" empNo ", empNo)

.getSingleResult();

}

}

public interface EmpDao {

@Orderby(“empNo”)

Emp findByEmpNo(Integer empNo_GE);

}

Kuina-Daoを利用する場合

(8)

コード例

コード例

public class EmpDao {

@PersistenceContext

private EntityManager em;

public List<Emp> findByEmpNo(Integer empNo) {

return (Emp)em.createQuery(“SELECT e FROM Emp e WHERE e.empNo >= :empNo”

ORDER BY empNo)

.setParameter(" empNo ", empNo)

.getResultList();

}

}

public

interface

EmpDao {

@Orderby(“empNo”)

List<Emp> findByEmpNo(Integer

empNo_GE);

}

Kuina-Daoを利用する場合

(9)

Kuina

Kuina

-

-

Dao

Dao

の特徴

の特徴

1.

必要最小限のJavaコード

インターフェースだけが必要で実装クラスは不要

抽象クラスを用意すれば独自ロジックを書ける

メソッド名やパラメータ名の命名規約を利用

必要に応じてアノテーションを使用可

2.

問い合わせを簡略化

JPQLの自動生成

動的な問い合わせに対応

SQLの動的な問い合わせに対応

3.

パラメータ名をKuina-Daoで利用するためにDiiguを使用

DiiguはAnt、Maven、Eclipse pluginで利用可能

(10)

Kuina

Kuina

-

-

Dao

Dao

の位置づけ

の位置づけ

S2Hibernate

-JPA

Kuina-Dao

S2TopLink

-JPA

S2OpenJPA

(開発中)

S2Caynenn

-JPA

(開発中)

Kuina-Core

(構想中)

Hibernate

TopLink

Essentials

OpneJPA

Cayenne

(Seasarプロジェクト外のプロダクト)

(11)

Kuina

Kuina

-

-

Dao

Dao

の仕組み

の仕組み

簡略版

簡略版

JPA実装

Kuina-Dao

DB

アプリ

JDBC

エンティティの取

得・更新

DTOの取得

インターセプト

(12)

Kuina

Kuina

-

-

Dao

Dao

の仕組み

の仕組み

詳細版

詳細版

JPA実装

Kuina-Dao

DB

アプリ

JDBC

エンティティの取

得・更新

DTOの取得

インターセプト

.sql

永続コンテキスト

(13)

デモ

デモ

• Kuina-Daoを使った問い合わせ

– 引数を条件とする検索

– エンティティのプロパティを条件とする検索

– DTOのプロパティを条件とする検索

– JPQLによる検索

– SQLによる検索

– Criteriaによる検索

(14)

デモ

デモ

-

-

エンティティクラスの構成

エンティティクラスの構成

• エンティティクラスの構成

Emp

Dept

id : Integer

empNo : Integer

empName : String

hireDate : Date

sal : BigDecimal

dept : Dept

mgr : Emp

versionNo : Integer

id : Integer

deptNo : Integer

deptName :String

loc : String

emps : Set

versionNo : Integer

従業員エンティティ

部署エンティティ

1

0..1

(15)

デモ

デモ

-

-

引数を条件とする検索

引数を条件とする検索

@Orderby("id")

public List<Emp> findBySal(BigDecimal sal_GE);

@Orderby("id")

public List<Emp> findBySalDeptName(BigDecimal sal_GE, String dept$deptName);

@Orderby("id")

public List<Emp> findByEmpNoArray(Integer[] empNo_IN);

1.引数名は検索対象のプロパティ名 + 検索条件を表すサフィックスとする。

2.関連先のエンティティのプロパティを検索条件に含めることもできる。

3.INを使った検索条件。

SELECT emp FROM Emp AS emp

WHERE (emp.sal >= :sal_GE)

ORDER BY emp.id

SELECT emp FROM Emp AS emp INNER JOIN emp.dept AS dept

WHERE ((emp.sal

>= :sal_GE) AND (dept.deptName = :dept$deptName))

ORDER BY emp.id

SELECT emp FROM Emp AS emp

WHERE emp.empNo IN

(:empNo_IN0, :empNo_IN1, :empNo_IN2, :empNo_IN3, :empNo_IN4)

ORDER BY emp.id

実行されるJPQL

実行されるJPQL

(16)

デモ

デモ

-

-

エンティティのプロパティを条件とする検索

エンティティのプロパティを条件とする検索

@Orderby("id")

public List<Emp> findByExample(Emp emp);

引数には検索条件を設定したエンティティを受ける。

Emp emp = new Emp(); emp.setEmpNo(empNo);

emp.setEmpName(empName); emp.setHiredate(hiredate); emp.setSal(sal);

Emp mgr = new Emp();

mgr.setEmpName(mgrName); emp.setMgr(mgr);

Dept dept = new Dept();

dept.setDeptName(deptName); emp.setDept(dept);

empDao.findByExample(Emp emp);

SELECT emp FROM Emp AS emp INNER JOIN emp.dept AS dept

WHERE ((emp.empName

= :empName) AND (emp.sal = :sal) AND (dept.deptName = :dept$deptName))

ORDER BY emp.id

使用例

(17)

EmpConditionDto dto = new EmpConditionDto(); dto.setEmpName_STARTS(empName); dto.setSal_GE(sal); dto.setDept$deptName_CONTAINS(deptName);

empDao.findByDto(EmpConditionDto dto);

デモ

デモ

-

-

DTO

DTO

のプロパティを条件とする検索

のプロパティを条件とする検索

@Orderby("id")

public List<Emp> findByDto(EmpConditionDto dto);

引数には検索条件を設定したDTOを受ける。

public class EmpConditionDto {

private String empName_STARTS;

private BigDecimal sal_GE;

private String dept$deptName_CONTAINS;

// getter, setter

}

DTOを定義。

プロパティ名はエンティティ

のプロパティ名 + 検索条件

を表すサフィックスとする。

SELECT emp FROM Emp AS emp INNER JOIN emp.dept AS dept

WHERE ((dept.deptName

LIKE :dept$deptName_CONTAINS) AND (emp.empName LIKE :empName_STARTS) AND

(emp.sal >= :sal_GE))

ORDER BY emp.id

使用例

(18)

デモ

デモ

-

-

JPQL

JPQL

による検索

による検索

public List<Emp> findByEmpName(String empName);

<named-query name="

EmpDao.findByEmpName

">

<query>

SELECT e FROM Emp e INNER JOIN e.mgr m

WHERE

e.empName = :empName

OR

m.empName = :empName

ORDER BY e.id

</query>

</named-query>

EmpOrm.xmlに名

前つきクエリを定義

しておく

名前つきクエリを呼び出す。

(19)

デモ

デモ

-

-

SQL

SQL

による検索

による検索

public List<SalSumDto> getSalSum();

外部ファイルに定義したSQLをDTOにマッピングする。

SELECT

d.DEPT_NAME deptName,

SUM(e.SAL) sal

FROM

Dept d INNER JOIN Emp e ON d.ID = e.DEPT_ID

GROUP BY

d.DEPT_NAME

ORDER BY

d.ID

EmpDao_getSal

Sum.sql

SQLを

定義しておく

public class SalSumDto {

private String deptName;

private BigDecimal sal;

}

(20)

デモ

デモ

-

-

Criteria

Criteria

による検索

による検索

import static org.seasar.kuina.dao.criteria.CriteriaOperations.*;

public abstract class Emp2DaoImpl implements Emp2Dao {

@PersistenceContext

private EntityManager em;

public List<Emp> findBySal(BigDecimal from, BigDecimal to) {

return

select().from(Emp.class,"e").where(between("e.sal",from,to))

.orderby("e.id").getResultList(em);

}

}

public List<Emp> findBySal(BigDecimal from, BigDecimal to);

外部ファイルに定義したSQLをDTOにマッピングする。

Javaクラスでクエ

リを組み立てる

SELECT e FROM Emp AS e WHERE (e.sal BETWEEN 1000 AND 2000) ORDER BY e.id

実行されるJPQL

(21)

Kuina

Kuina

-

-

Dao

Dao

JPA

JPA

まとめ

まとめ

3

2

1

DTOの取得

×

動的な問い合わせ

静的な問い合わせ

JPA実装を直接利用

Kuina-Dao + JPA実装

JPA実装

実装

実装

実装を

を直接利用

直接利用

直接利用

直接利用するよりも

するよりも

するよりも

するよりも

Kuina-Daoと

と組

組み

み合

合わせて

わせて

わせて

わせて使用

使用した

使用

使用

した

した

した方

方が

が便利

便利

便利!

便利

でも、そもそもJPAって実際に有用なの?

(22)

Kuina

Kuina

-

-

Dao

Dao

S2Dao

S2Dao

Kuina

(23)

Kuina

Kuina

-

-

Dao

Dao

の仕組み

の仕組み

JPA実装

Kuina-Dao

DB

アプリ

JDBC

エンティティの取

得・更新

DTOの取得

永続コンテキスト

.sql

インターセプト

(24)

S2

S2

Dao

Dao

の仕組み

の仕組み

S2-Dao

DB

アプリ

JDBC

DTOの取得・更新

インターセプト

.sql

(25)

Kuina

Kuina

-

-

Dao

Dao

S2Dao

S2Dao

の関係

の関係

• ともにDaoフレームワーク

– Kuina-DaoはJPAベース

• 問い合わせはJPQLもしくはSQL

• マッピングはJPAの標準仕様

• 問い合わせの実行やマッピングはJPA実装が行う

– S2DaoはJDBCベース

• 問い合わせはSQL

• マッピングはS2Daoの独自仕様

• 問い合わせの実行もマッピングもS2Daoが行う

• アーキテクチャ上、S2Daoに対応するのはKuina-Dao単体では

なく、Kuina-Dao + JPA実装

• Kuina-DaoはS2Daoの後継ではない

(26)

(

(

Kuina

Kuina

-

-

Dao +

Dao +

JPA

JPA

実装

実装

) VS. S2Dao

) VS. S2Dao

プロジェクトへ適用する場合に、どちらがより適してい

(27)

比較

比較

1

1

人気(

人気(

ダウンロード数

ダウンロード数

0

100

200

300

400

500

600

700

800

900

1000

20

06

/1

2

20

07

/1

20

07

/2

20

07

/3

20

07

/4

20

07

/5

Kuina-Dao

S2Dao

ここでのダウンロード

数とは配布zipファイ

ルに対するアクセス

数です。

Maven2やDoltengに

よる利用数は含めて

いません。

5月13日時点のデータ

(28)

比較結果

比較結果

1

1

人気(

人気(

ダウンロード数

ダウンロード数

6

8

2

×

×

×

×

人気

人気

人気

人気

((

(ダウンロード

ダウンロード

ダウンロード

ダウンロード数

数)

))

1

7

5

4

3

S2Dao

Kuina-Dao + JPA実装

(29)

比較

比較

2

2

学習コスト

学習コスト

• S2Daoの学習コストは低い

– SQLの知識

– SQLコメント

– メソッドの命名規則

– アノテーション

• Kuina-DAO自体の学習コストは並だが…

– JPAの知識

• 永続コンテキストとエンティティのライフサイクル

– SQLの知識

– SQLコメント

– アノテーション

– メソッドの命名規則

– パラメーターの命名規約

(30)

比較結果

比較結果

2

2

学習コスト

学習コスト

6

8

×

×

×

×

学習

学習

学習

学習コスト

コスト

コスト

コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

S2Dao

Kuina-Dao + JPA実装

(31)

比較

比較

3

3

SQL

SQL

の利用

の利用

• SQLは既存の資産

– 実際のSQL

– SQLの知識

– SQLを中心とした開発に対する経験

• S2Daoの場合

– SQLをフル活用できる

• SQLを外部ファイルに記述しDTOにマッピングするだけ

• Kuina-Daoの場合

– SQLをサポートするが、主役はJPAでのデータアクセス

– 一部の複雑なアクセスはJPAを経由しないでSQLで行うのがよい

• S2Daoと同様外部ファイルに記述したSQLをDTOにマッピングできる

(32)

比較結果

比較結果

3

3

SQL

SQL

の利用

の利用

6

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

SQLの

の利用

利用

利用

利用

S2Dao

Kuina-Dao + JPA実装

(33)

比較

比較

4

4

チューニング

チューニング

• JPAを使う/使わないでチューニングの対象は異なる

• S2Daoの場合

– SQL

• JPAの場合

– マッピング

– フェッチ

– 永続コンテキスト

(34)

比較結果

比較結果

4

4

チューニング

チューニング

6

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

チューニング

チューニング

チューニング

チューニング

SQLの利用

S2Dao

Kuina-Dao + JPA実装

(35)

比較

比較

5

5

レガシーな

レガシーな

ER

ER

モデルとの相性

モデルとの相性

• ここでの「レガシーなERモデル」の定義

– 複合主キーを利用している

– トリガーを多用している

• S2Daoの場合

– すべてSQLで解決できるので相性は良い

• JPAの場合

– JPAでは複合主キーを使う/使わないでマッピングが異なるので注意

• @EmbeddedId、 @JoinColumns

• クラス数が増える、コードが増える

– トリガーでDBが更新されると、DBとJPAの永続コンテキストがずれる

• EntityManager#refresh()

(36)

比較結果

比較結果

5

5

レガシーな

レガシーな

ER

ER

モデルとの相性

モデルとの相性

6

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

レガシー

レガシー

レガシー

レガシーな

なERモ

デル

デル

デル

デルとの

との

との相性

との

相性

相性

相性

チューニング

SQLの利用

S2Dao

Kuina-Dao + JPA実装

(37)

比較

比較

6

6

マッピング

マッピング

• S2Daoの場合

– 独自のアノテーションと規約でマッピング

• フラットなDTOにマッピングされる

– リレーションシップのマッピング

• Many to One

• 双方向関連や遅延ローディングの機能はない

• JPAの場合

– 標準のアノテーションでマッピング

• 階層化されたデータ構造にマッピングされる

– リレーションシップのマッピング

• Many to One

• One to Many

• One to One

• Many to Many

• 双方向関連や遅延ローディングをサポート

(38)

比較結果

比較結果

6

6

マッピング

マッピング

マッピング

マッピング

マッピング

マッピング

6

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

レガシーなERモデルとの相性

チューニング

SQLの利用

S2Dao

Kuina-Dao + JPA実装

(39)

比較

比較

7

7

永続コンテキスト

永続コンテキスト

• S2Daoの場合

– 永続コンテキストに相当するキャッシュはもたない

– 常にDBに問い合わせることでシンプルさを保つ

• JPAの場合

– JPA実装が永続コンテキストを管理する

– 問い合わせはキャッシュされるので、同じトランザクション内で何度も同じ

エンティティにアクセス(更新、問い合わせ)する場合に効果を発揮する

(40)

比較結果

比較結果

7

7

永続コンテキスト

永続コンテキスト

マッピング

6

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

レガシーなERモデルとの相性

×

×

×

×

永続

永続

永続

永続コンテキスト

コンテキスト

コンテキスト

コンテキスト

チューニング

SQLの利用

S2Dao

Kuina-Dao + JPA実装

(41)

比較

比較

8

8

ツールのサポート

ツールのサポート

• S2Daoの場合

– Seasarプロジェクトが提供

• Dolteng

• DBFlute

• S2Dao-CodeGen

• Kuina-Daoの場合

– Seasarプロジェクトが提供

• Dolteng

– (JPAの部分に関しては)IDEが提供

• Eclipse

– Dali JPA Tools

• NetBeans

• JDeveloper

(42)

比較結果

比較結果

8

8

ツールのサポート

ツールのサポート

マッピング

6

×

×

×

×

ツール

ツール

ツール

ツールの

のサポート

サポート

サポート

サポート

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

レガシーなERモデルとの相性

×

永続コンテキスト

チューニング

SQLの利用

S2Dao

Kuina-Dao + JPA実装

(43)

Kuina

Kuina

-

-

Dao

Dao

S2Dao

S2Dao

まとめ

まとめ

(

(

1

1

)

)

マッピング

6

×

ツールのサポート

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

レガシーなERモデルとの相性

×

永続コンテキスト

チューニング

SQLの利用

S2Dao

Kuina-Dao + JPA実装

5 対 3 でS2Daoの勝ち?

(44)

Kuina

Kuina

-

-

Dao

Dao

S2Dao

S2Dao

まとめ

まとめ

(

(

2

2

)

)

マッピング

マッピング

マッピング

マッピング

6

×

ツール

ツール

ツール

ツールの

のサポート

サポート

サポート

サポート

8

×

学習コスト

2

×

人気(ダウンロード数)

1

7

5

4

3

レガシーなERモデルとの相性

×

永続

永続

永続

永続コンテキスト

コンテキスト

コンテキスト

コンテキスト

チューニング

SQLの利用

S2Dao

Kuina-Dao + JPA実装

(45)

Kuina

Kuina

-

-

Dao

Dao

の使

の使

使

使

使いどころ

使いどころ

使

使

いどころ

いどころ

いどころ

いどころ

いどころ

いどころ

Kuina

(46)

2

2

タイプのアプリケーション

タイプのアプリケーション

• 世の中のアプリケーションは2種類に分けられる

– データの入出力が中心のアプリケーション

– データの評価・加工が中心のアプリケーション

• 入出力が中心のアプリケーションとは?

– 画面からの入力したデータをほとんどそのままバックエンドシステム(DB、

メインフレーム)にわたす

– バックエンドシステム(DB、メインフレーム)から受け取ったデータをほと

んどそのまま画面に出力する

• 評価・加工が中心のアプリケーションとは?

– データベースに問い合わせながらあるデータを評価し、その評価に基づ

いて加工を行うアプリケーション

(47)

入出力中心のアプリケーションの場合

入出力中心のアプリケーションの場合

業務ロジックがほとんどない

– バリデーションやデータの型変換などはある

キャッシュの仕組みは不要

– 入力時は、更新メソッドを呼べばよい

– 出力時は、画面に合わせて必要なデータを取得すればよい

2種類のマッピングがあればOK

– テーブルとオブジェクトのマッピング

– 任意の結果セットとオブジェクトのマッピング

DB

S2Dao

プレゼン

テーション

DTOを

やり取りする

ロジック

(48)

ロジック

ロジック

評価・加工が中心のアプリケーションの場合

評価・加工が中心のアプリケーションの場合

同一テーブルの同一レコードがトランザクション内で複数のロジックにまた

がって何度もアクセスされる

– 必要毎のDBアクセスは避けたい→

永続

永続

永続

永続コンテキスト

コンテキスト

コンテキスト

コンテキスト

でのキャッシュ

同一テーブルの同一レコードがトランザクション内でさまざまに変更される

– 変更毎のDBアクセスは避けたい→コミット時の

永続

永続

永続

永続コンテキスト

コンテキスト

コンテキスト

コンテキスト

のフラッシュ

データにグループ化や階層構造が必要

– リレーションシップ

リレーションシップ

リレーションシップ

リレーションシップの

のマッピング

マッピング

マッピング

マッピング

JPA実装

Kuina-Dao

DB

永続コンテキスト プレゼン テーション

ロジック

エンティティを管理 トランザクション境界

ロジック

(49)

評価・加工が中心のアプリケーションの例

評価・加工が中心のアプリケーションの例

• シミュレーション系アプリ(例えば生産管理のスケジューリング)

– 一度のトランザクションで何度も変更されるエンティティ

• 所要量

• タスク

• スケジュール

• 在庫

– 一度のトランザクションで何度もアクセスされるエンティティ

• スケジュール

• タスク

• リソース

• 能力

• 部品

• 部品構成

• 在庫

(50)

• JPAが効果的なアプリケーションにはKuina-Daoも効果的

– Kuina-DaoはJPAを使いやすくするフレームワーク

• JPAの使いどころ

– 永続コンテキスト

• DBアクセスを減らすための仕組み(キャッシュ・コミット時のフラッシュ)が備

わっている

– アプリケーションをシンプルに保てる

– 管理すべきSQLを減らせる

– リレーションシップのマッピング

• データのまとまりや階層構造(1対多・多対1)をロジックで扱える

– ツール(IDEやIDEのプラグインなど)のサポート

• エンティティの自動生成

• エンティティの編集補完

• 設定ファイルの自動生成

Kuina

Kuina

-

-

Dao

Dao

の使いどころ

の使いどころ

まとめ

まとめ

評価・加工が中心ならば

(51)

Kuina

Kuina

-

-

Dao

Dao

の使

の使

使

使

使いどころ

使いどころ

使

使

いどころ

いどころ

いどころ

いどころ

いどころ

いどころ

アドバンスド

アドバンスド

アドバンスド

アドバンスド

アドバンスド

アドバンスド

アドバンスド

アドバンスド

Kuina

(52)

S2Dao

S2Dao

で入出力中心のアプリケーション

で入出力中心のアプリケーション

• DTOの管理が煩雑

– 画面が増えると対応してDTOとDAOが増える

DB

S2Dao

プレゼン

テーション

DTO

やり取りする

トランザクション境界 ロジック

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

(53)

Kuina

Kuina

-

-

Dao

Dao

で入出力中心のアプリケーション

で入出力中心のアプリケーション

• エンティティをそのまま表示すればOK

– 画面が増えてもDTOを管理する必要がない。でも…

ロジック

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

テーション

プレゼン

JPA実装

Kuina-Dao

DB

永続コンテキスト エンティティを管理 トランザクション境界 エンティティを表示

(54)

遅延ローディングにどう対応するか

遅延ローディングにどう対応するか

a. あらかじめアクセスしておく

b. フェッチタイプをEagerに設定しておく

c. Transaction View

d. Entity Manager per Request

e. DTOに変換

(55)

遅延ローディングにどう対応するか

遅延ローディングにどう対応するか

ベストプラクティス

ベストプラクティス

• フェッチタイプはすべてLazyに設定しておく

– @ManyToOne(

fetch = FetchType.LAZY

)

• 必要なものだけFetch Joinで取得する

– Kuina-Daoでは簡単にFetch Joinするための仕組みを提供

• @Distinct

@FetchJoin(joinSpec = JoinSpec.LEFT_OUTER_JOIN, value = “emps”)

List<Dept> findByLoc(String loc);

– もちろんJPQLを書いてもOK

• SELECT DISTINCT dept FROM Dept AS dept LEFT OUTER JOIN FETCH

dept.emps WHERE (dept.loc = :loc)

(56)

Kuina

Kuina-

-

Dao

Dao

の使いどころ

の使いどころ

アドバンスド

アドバンスド

まとめ

まとめ

エンティティを直接参照する形は今後

Teedaがサポート

ロジック

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

テーション

プレゼン

プレゼン

テーション

Pageクラス

Teedaの

JPA実装

Kuina-Dao

DB

永続コンテキスト エンティティを管理 トランザクション境界 エンティティを表示 @FetchJoinで必要なエ ンティティだけを取得

(57)

ロードマップ

ロードマップ

ロードマップ

ロードマップ

ロードマップ

ロードマップ

ロードマップ

ロードマップ

ロードマップ

ロードマップ

(58)

Kuina

Kuina

-

-

Dao

Dao

関連プロダクトのロードマップ

関連プロダクトのロードマップ

• 現在

– 2007年5月 S2TopLink-JPA 1.0-r3 リリース

– 2007年5月 S2Hibernate-JPA 1.0 リリース

– 2007年5月 Kuina-Dao 1.0 リリース

• 予定

– 2007年9月 S2TopLink-JPA 1.0 リリース予定

– 2007年x月 S2OpenJPA 1.0 リリース予定

– 2007年x月 S2Cayenne-JPA 1.0 リリース予定

皆さんの

さんの

さんの

さんの要望

要望

要望を

要望

を受

受け

け付

付けています

けています

けています

けています!

(59)

Kuina

Kuina

-

-

Dao

Dao

の関連情報

の関連情報

ドキュメント

http://kuina.seasar.org/ja/

書籍

– Java Expert #01

http://www.amazon.co.jp/Java-Expert-01-編集部/dp/4774130702/

メーリングリスト

– Seasar userメーリングリスト

[email protected]

– JPAメーリングリスト

[email protected]

サンプル(テストコード)

– SVNリポジトリ

https://www.seasar.org/svn/kuina/trunk/kuina-dao-it

ツール

– Dolteng(

どぅるてん

http://www.seasar.org/wiki/index.php?Dolteng

(60)

ありがとうございました

ありがとうございました

参照

関連したドキュメント

The northern Oman ophiolite contains podiform chromitites with a variety of Cr# of chromian spinel (Ahmed &amp; Arai 2002) from the Moho transition zone to the upper mantle

First three eigenfaces : 3 個で 90 %ぐらいの 累積寄与率になる.

The remainder of this paper is organised as follows: the structural properties like diameter, radius, girth, vertex degree, connectivity, planarity, Eulerian, Hamiltonian, and many

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

In our previous papers (Nishimura [2001 and 2003]) we dealt with jet bundles from a synthetic perch by regarding a 1-jet as something like a pin- pointed (nonlinear) connection

In addition, under the above assumptions, we show, as in the uniform norm, that a function in L 1 (K, ν) has a strongly unique best approximant if and only if the best

Macdonald in [11], and a proof of Macdonald’s identities for infinite families of root systems was given by D..

We relate group-theoretic constructions (´ etale-like objects) and Frobenioid-theoretic constructions (Frobenius-like objects) by transforming them into mono-theta environments (and