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

142,690 views

Published on

Published in: Economy & Finance, Business
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
142,690
On SlideShare
0
From Embeds
0
Number of Embeds
131,522
Actions
Shares
0
Downloads
28
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

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

  1. 1. 金魚本に載ってないJPQLの話 @megascus12年9月24日月曜日
  2. 2. 金魚本のJPQLの記載12年9月24日月曜日
  3. 3. 15 / 557ページ12年9月24日月曜日
  4. 4. 金魚本に載っていないけど 使えるJPQLの構文12年9月24日月曜日
  5. 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. 6. 副問い合わせ(EXISTS句) SELECT DISTINCT emp FROM Employee emp WHERE [NOT] EXISTS ( SELECT spouseEmp FROM Employee spouseEmp WHERE spouseEmp = emp.spouse)12年9月24日月曜日
  7. 7. 相関副問い合わせ SELECT c FROM Customer c WHERE (SELECT AVG(o.price) FROM c.orders o) > 10012年9月24日月曜日
  8. 8. 結合 SELECT o FROM Order AS o [[LEFT] OUTER,INNER] JOIN o.lineItems l JOIN l.product p12年9月24日月曜日
  9. 9. FETCH JOIN SELECT o FROM Order AS o JOIN FETCH o.lineItems l ※Lazyフェッチになっている結合を 強制的にEagerフェッチにする12年9月24日月曜日
  10. 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. 11. コンストラクタ式 SELECT NEW example.CustomerDetails(c.id, c.status, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 10012年9月24日月曜日
  12. 12. コンストラクタ式 • 使いこなせればEager、Lazyの判断が要らなくなる。 (全部Eagerで性能の心配がある時コンストラクタ式で取得) • サマリーを取得したい場合には使って下さい。12年9月24日月曜日
  13. 13. JPQL使用上の注意12年9月24日月曜日
  14. 14. JPQL使用上の注意 • すでにメモリ上に取得されたエンティティへの反映は 行われない。 • @Versionの更新は自動では行われない。12年9月24日月曜日
  15. 15. メモリ上のエンティティ12年9月24日月曜日
  16. 16. @VERSIONの更新 UPDATE customer c SET c.status = ‘outstanding’ c.version = c.version + 1 WHERE c.balance < 10000 ※JPQLの場合楽観ロックは自分で制御して下さい。12年9月24日月曜日
  17. 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. 18. JSR 317 JavaTM Persistence API Version 2.0 今日の内容+α 全部書いてあります。 http://jcp.org/en/jsr/detail?id=31712年9月24日月曜日
  19. 19. マスタリング JAVAEE5 古くても 日本語情報が欲しい場合 http://goo.gl/C1QZQ12年9月24日月曜日

×