Upload
satoshi-kubo
View
92.685
Download
2
Embed Size (px)
Citation preview
金魚本に載ってない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 empFROM Employee empWHERE [NOT] EXISTS ( SELECT spouseEmp FROM Employee spouseEmp WHERE spouseEmp = emp.spouse)
12年9月24日月曜日
相関副問い合わせ
SELECT cFROM Customer cWHERE (SELECT AVG(o.price) FROM c.orders o) > 100
12年9月24日月曜日
結合
SELECT oFROM Order AS o
[[LEFT] OUTER,INNER] JOIN o.lineItems l
JOIN l.product p
12年9月24日月曜日
FETCH JOIN
SELECT oFROM 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 cSET c.status = ‘outstanding’ c.version = c.version + 1WHERE 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 317JavaTM Persistence
API Version 2.0今日の内容+α
全部書いてあります。
http://jcp.org/en/jsr/detail?id=317
12年9月24日月曜日
マスタリングJAVAEE5古くても
日本語情報が欲しい場合
http://goo.gl/C1QZQ
12年9月24日月曜日