More Related Content Similar to はまる!!JPA #glassfish_jp #javaee Similar to はまる!!JPA #glassfish_jp #javaee(8) More from Toshiaki Maki(20) はまる!!JPA #glassfish_jp #javaee1. @MAKING 槙 俊明
2 0 1 3 - 1 2 - 1 3 G L A S S F I S H U S E R S G R O U P J A PA N 勉 強 会 2 0 1 3 # 2
は ま る ! J PA
4. み な さ ん J PA つ か っ て い ま す か ?
5. 私 の J PA 経 験
• とある企業のバックエンドシステム
• 約 50エンティティ、約 80 k LOC
• X億ユーザー・・・
• おれおれBlogシステム
• https://github.com/making/categolj2-backend
• 約 10エンティティ、now developing
6. 僕 が J PA を 使 っ て 遭 遇 し た
はまりポイントをだらだら述べていきます
22. ログを確認
O R D E R を 検 索 して
ORDER毎に
…
O R D E R _ I T E M を 検 索 して
23. ログを確認
O R D E R を 検 索 して
ORDER毎に
O R D E R _ I T E M を 検 索 して
ORDER_ITEM毎に
…
ITEMを検索
24. ログを確認
O R D E R を 検 索 して
ORDER毎に
O R D E R _ I T E M を 検 索 して
ORDER_ITEM毎に
ITEMを検索
…
1 + 100 X (1 + 5) = 601回
S Q L が 実 行 さ れて い る ・ ・ ・
29. FETCH_TYPE=LAZYなので
こ の 段 階 で は 関 連 E N T I T Y は F E T C H さ れて い な い
関 連 E N T I T Y に アク セ ス し
たタイミングでSQL発行
関 連 E N T I T Y に アク セ ス し
たタイミングでSQL発行
41. J PA 仕 様 で は ・ ・ ・
• ネストしたJOIN FETCHはサポートされていない
• JOIN FETCHのエイリアスを設定できない
42. J PA 仕 様 で は ・ ・ ・
• ネストしたJOIN FETCHはサポートされていない
• JOIN FETCHのエイリアスを設定できない
H I B E R N AT E で は サ ポ ー ト さ れ て い る
57. 更 新 して み る
使 用 さ れて い な い E M A I L
58. 更 新 して み る
使 用 さ れて い な い E M A I L
59. 更 新 して み る
使 用 さ れて い な い E M A I L
60. 更 新 して み る
使 用 さ れて い な い E M A I L
ファッ!?
79. E N T I T Y の ラ イ フ サ イク ル
80. E N T I T Y の ラ イ フ サ イク ル
ここのタイミングに注意!
FLUSH、JPQL、・・・
87. 1 対 多 + 複 合 キ ー な ケ ース
91. テス ト デ ー タ 登 録
CASCADE=ALL
なのでNULLでいいはず・・
104. EJBを修正
TA G 以 外 を い っ た ん 保 存
F L U S H して I D を 採 番
採 番 し た I D を 設 定 して 保 存
107. こ れで い い の か ! ?
• CASCADE_TYPE=ALLなのに関連エンティティを1つず
つ保存している
• EJB実装のアドホック感・・・
• 双方向の関連ではエラーになる
108. こ れで い い の か ! ?
• CASCADE_TYPE=ALLなのに関連エンティティを1つず
つ保存している
• EJB実装のアドホック感・・・
• 双方向の関連ではエラーになる
根本解決を!
116. も と も と H I B E R N AT E で は ま っ て い た 問 題
• 余計なものまで更新されちゃう問題
• 削除したつもりが削除されていなかった問題
• StackOverflow問題
117. も と も と H I B E R N AT E で は ま っ て い た 問 題
• 余計なものまで更新されちゃう問題
• 削除したつもりが削除されていなかった問題
• StackOverflow問題
ECLIPSELINK版で調査間に合わず!