SlideShare a Scribd company logo
1 of 19
Download to read offline
金魚本に載ってないJPQLの話
              @megascus




12年9月24日月曜日
金魚本のJPQLの記載




12年9月24日月曜日
15 / 557ページ




12年9月24日月曜日
金魚本に載っていないけど
              使えるJPQLの構文



12年9月24日月曜日
副問い合わせ

  SELECT emp
    FROM Employee emp
    WHERE emp.salary > [ALL,ANY,SOME] (
      SELECT m.salary
      FROM Manager m 
      WHERE m.department = emp.department)




12年9月24日月曜日
副問い合わせ(EXISTS句)


  SELECT DISTINCT emp
  FROM Employee emp
  WHERE [NOT] EXISTS (
    SELECT spouseEmp
    FROM Employee spouseEmp
    WHERE spouseEmp = emp.spouse)




12年9月24日月曜日
相関副問い合わせ



  SELECT c
  FROM Customer c
  WHERE
  (SELECT AVG(o.price) FROM c.orders o) > 100




12年9月24日月曜日
結合


  SELECT o
  FROM Order AS o
  [[LEFT] OUTER,INNER] JOIN o.lineItems l
  JOIN l.product p




12年9月24日月曜日
FETCH JOIN

      SELECT o
      FROM Order AS o
       JOIN FETCH o.lineItems l


  ※Lazyフェッチになっている結合を

  強制的にEagerフェッチにする




12年9月24日月曜日
こんなエラーを見たら使う

  • Hibernate

     org.hibernate.LazyInitializationException: could not initialize proxy - no Session


  • EclipseLink

     org.eclipse.persistence.exceptions.ValidationExceptionException Description: An attempt was made
     to traverse a relationship using indirection that had a null Session. This often occurs when an entity
     with an uninstantiated LAZY relationship is serialized and that lazy relationship is traversed after
     serialization. To avoid this issue, instantiate the LAZY relationship prior to serialization.




12年9月24日月曜日
コンストラクタ式

      SELECT NEW example.CustomerDetails(c.id,
      c.status, o.count)
      FROM Customer c JOIN c.orders o WHERE
      o.count > 100




12年9月24日月曜日
コンストラクタ式


  • 使いこなせればEager、Lazyの判断が要らなくなる。


     (全部Eagerで性能の心配がある時コンストラクタ式で取得)

  • サマリーを取得したい場合には使って下さい。




12年9月24日月曜日
JPQL使用上の注意




12年9月24日月曜日
JPQL使用上の注意


  • すでにメモリ上に取得されたエンティティへの反映は

     行われない。

  • @Versionの更新は自動では行われない。




12年9月24日月曜日
メモリ上のエンティティ




12年9月24日月曜日
@VERSIONの更新


  UPDATE customer c
  SET c.status = ‘outstanding’
      c.version = c.version + 1
  WHERE c.balance < 10000

  ※JPQLの場合楽観ロックは自分で制御して下さい。




12年9月24日月曜日
JPQLの予約語

  ABS, ALL, AND, ANY, AS, ASC, AVG, BETWEEN, (BIT_LENGTH), BOTH, BY,
  CASE, (CHAR_LENGTH), (CHARACTER_LENGTH), CLASS, COALESCE,
  CONCAT, COUNT, CURRENT_DATE, CURRENT_TIME,
  CURRENT_TIMESTAMP, DELETE, DESC, DISTINCT, ELSE, EMPTY, END,
  ENTRY, ESCAPE, EXISTS, FALSE, FETCH, FROM, GROUP, HAVING, IN,
  INDEX, INNER, IS, JOIN, KEY, LEADING, LEFT, LENGTH, LIKE, LOCATE,
  LOWER, MAX, MEMBER, MIN, MOD, NEW, NOT, NULL, NULLIF, OBJECT,
  OF, OR, ORDER, OUTER, (POSITION), SELECT, SET, SIZE, SOME, SQRT,
  SUBSTRING, SUM, THEN, TRAILING, TRIM, TRUE, TYPE, (UNKNOWN),
  UPDATE, UPPER, VALUE, WHEN, WHERE

  ※括弧でくくってあるものは将来に対する予約語



12年9月24日月曜日
JSR 317
     JavaTM Persistence
       API Version 2.0
              今日の内容+α
      全部書いてあります。



      http://jcp.org/en/jsr/detail?id=317


12年9月24日月曜日
マスタリング
              JAVAEE5
                 古くても
    日本語情報が欲しい場合



              http://goo.gl/C1QZQ


12年9月24日月曜日

More Related Content

What's hot

Spring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsugSpring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsugMasatoshi Tada
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
VMC-02-VMware Cloud on AWS のご紹介_2021.pptx
VMC-02-VMware Cloud on AWS のご紹介_2021.pptxVMC-02-VMware Cloud on AWS のご紹介_2021.pptx
VMC-02-VMware Cloud on AWS のご紹介_2021.pptxaaaa273385
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)Masatoshi Tada
 
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説Masatoshi Tada
 
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本Takahiro YAMADA
 
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり Rakuten Group, Inc.
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線MeetupMasatoshi Tada
 
負荷分散勉強会
負荷分散勉強会負荷分散勉強会
負荷分散勉強会Yuji Otani
 
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018Yusuke Suzuki
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介Akira Tanaka
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppTomomitsuKusaba
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?土岐 孝平
 
NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020gree_tech
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 

What's hot (20)

Spring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsugSpring Data JPAによるデータアクセス徹底入門 #jsug
Spring Data JPAによるデータアクセス徹底入門 #jsug
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
VMC-02-VMware Cloud on AWS のご紹介_2021.pptx
VMC-02-VMware Cloud on AWS のご紹介_2021.pptxVMC-02-VMware Cloud on AWS のご紹介_2021.pptx
VMC-02-VMware Cloud on AWS のご紹介_2021.pptx
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
 
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
 
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
 
負荷分散勉強会
負荷分散勉強会負荷分散勉強会
負荷分散勉強会
 
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor App
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
 
NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 

More from Satoshi Kubo

Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations Satoshi Kubo
 
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらいSatoshi Kubo
 
できる!Pmdカスタマイズ
できる!Pmdカスタマイズできる!Pmdカスタマイズ
できる!PmdカスタマイズSatoshi Kubo
 
Javaの速度比較
Javaの速度比較Javaの速度比較
Javaの速度比較Satoshi Kubo
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)Satoshi Kubo
 
テストって何がしたいんですか?
テストって何がしたいんですか?テストって何がしたいんですか?
テストって何がしたいんですか?Satoshi Kubo
 
Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Satoshi Kubo
 
泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUGSatoshi Kubo
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Satoshi Kubo
 
Advent calendarを作ってみた
Advent calendarを作ってみたAdvent calendarを作ってみた
Advent calendarを作ってみたSatoshi Kubo
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scalaSatoshi Kubo
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたSatoshi Kubo
 
JavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjpJavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjpSatoshi Kubo
 

More from Satoshi Kubo (15)

Jakarta CDI 4.0
Jakarta CDI 4.0Jakarta CDI 4.0
Jakarta CDI 4.0
 
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
 
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
 
今のJava
今のJava今のJava
今のJava
 
できる!Pmdカスタマイズ
できる!Pmdカスタマイズできる!Pmdカスタマイズ
できる!Pmdカスタマイズ
 
Javaの速度比較
Javaの速度比較Javaの速度比較
Javaの速度比較
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)
 
テストって何がしたいんですか?
テストって何がしたいんですか?テストって何がしたいんですか?
テストって何がしたいんですか?
 
Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎
 
泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
 
Advent calendarを作ってみた
Advent calendarを作ってみたAdvent calendarを作ってみた
Advent calendarを作ってみた
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scala
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
 
JavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjpJavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjp
 

金魚本に載ってないJpqlの話 #glassfishjp

  • 1. 金魚本に載ってないJPQLの話 @megascus 12年9月24日月曜日
  • 4. 金魚本に載っていないけど 使えるJPQLの構文 12年9月24日月曜日
  • 5. 副問い合わせ SELECT emp FROM Employee emp   WHERE emp.salary > [ALL,ANY,SOME] (     SELECT m.salary     FROM Manager m  WHERE m.department = emp.department) 12年9月24日月曜日
  • 6. 副問い合わせ(EXISTS句) SELECT DISTINCT emp FROM Employee emp WHERE [NOT] EXISTS ( SELECT spouseEmp FROM Employee spouseEmp WHERE spouseEmp = emp.spouse) 12年9月24日月曜日
  • 7. 相関副問い合わせ SELECT c FROM Customer c WHERE (SELECT AVG(o.price) FROM c.orders o) > 100 12年9月24日月曜日
  • 8. 結合 SELECT o FROM Order AS o [[LEFT] OUTER,INNER] JOIN o.lineItems l JOIN l.product p 12年9月24日月曜日
  • 9. FETCH JOIN SELECT o FROM Order AS o JOIN FETCH o.lineItems l ※Lazyフェッチになっている結合を 強制的にEagerフェッチにする 12年9月24日月曜日
  • 10. こんなエラーを見たら使う • Hibernate org.hibernate.LazyInitializationException: could not initialize proxy - no Session • EclipseLink org.eclipse.persistence.exceptions.ValidationExceptionException Description: An attempt was made to traverse a relationship using indirection that had a null Session. This often occurs when an entity with an uninstantiated LAZY relationship is serialized and that lazy relationship is traversed after serialization. To avoid this issue, instantiate the LAZY relationship prior to serialization. 12年9月24日月曜日
  • 11. コンストラクタ式 SELECT NEW example.CustomerDetails(c.id, c.status, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 100 12年9月24日月曜日
  • 12. コンストラクタ式 • 使いこなせればEager、Lazyの判断が要らなくなる。 (全部Eagerで性能の心配がある時コンストラクタ式で取得) • サマリーを取得したい場合には使って下さい。 12年9月24日月曜日
  • 14. JPQL使用上の注意 • すでにメモリ上に取得されたエンティティへの反映は 行われない。 • @Versionの更新は自動では行われない。 12年9月24日月曜日
  • 16. @VERSIONの更新 UPDATE customer c SET c.status = ‘outstanding’ c.version = c.version + 1 WHERE c.balance < 10000 ※JPQLの場合楽観ロックは自分で制御して下さい。 12年9月24日月曜日
  • 17. JPQLの予約語 ABS, ALL, AND, ANY, AS, ASC, AVG, BETWEEN, (BIT_LENGTH), BOTH, BY, CASE, (CHAR_LENGTH), (CHARACTER_LENGTH), CLASS, COALESCE, CONCAT, COUNT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DELETE, DESC, DISTINCT, ELSE, EMPTY, END, ENTRY, ESCAPE, EXISTS, FALSE, FETCH, FROM, GROUP, HAVING, IN, INDEX, INNER, IS, JOIN, KEY, LEADING, LEFT, LENGTH, LIKE, LOCATE, LOWER, MAX, MEMBER, MIN, MOD, NEW, NOT, NULL, NULLIF, OBJECT, OF, OR, ORDER, OUTER, (POSITION), SELECT, SET, SIZE, SOME, SQRT, SUBSTRING, SUM, THEN, TRAILING, TRIM, TRUE, TYPE, (UNKNOWN), UPDATE, UPPER, VALUE, WHEN, WHERE ※括弧でくくってあるものは将来に対する予約語 12年9月24日月曜日
  • 18. JSR 317 JavaTM Persistence API Version 2.0 今日の内容+α 全部書いてあります。 http://jcp.org/en/jsr/detail?id=317 12年9月24日月曜日
  • 19. マスタリング JAVAEE5 古くても 日本語情報が欲しい場合 http://goo.gl/C1QZQ 12年9月24日月曜日