Re: [J2EE] JPA JTA

看板java作者 (老子我最神)時間8年前 (2015/08/05 01:10), 8年前編輯推噓5(5012)
留言17則, 4人參與, 最新討論串2/4 (看更多)
※ 引述《luoqr (.....)》之銘言: 我在寫某個專案也很奇怪 只要 entity 有異動到,就算不做 save or update 等方法 transaction 結束後會把全部的異動 commit 到 DB 裡面... 還有一個就是 若 entity constraint 設定若跟 DB 不符, save 當下不會出錯,transaction 結束後才會出錯 但是包在 transaction 外層的 code block 並不會接到 exception... 像這樣 try { test1(); log.info("完成"); } catch(Exception e) { log.error("出現錯誤") } 就算 test1 出錯 (transaction 掛 test1),仍會 log 出 "完成" 這兩個 case 我不能理解阿,有人能解釋嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.192.133 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1438708254.A.153.html

08/05 07:45, , 1F
1.entity處於managed狀態 只要有異動就會反應到db
08/05 07:45, 1F

08/05 07:46, , 2F
2.資訊不足無法判斷 XD
08/05 07:46, 2F
我也有查到相關資訊 但是我不太能理解,既然這樣何必用 update 或 save ... 根本是 虛有其表的 method... 我在另一個專案,不會自動更新 entity,必須要 save 或 update 才可以 我也認為這樣比較合理 @@ ※ 編輯: cyclone350 (123.193.192.133), 08/05/2015 08:05:35

08/05 10:24, , 3F
主要還是"同步的時機點",同步次數過多是沒有必要的
08/05 10:24, 3F

08/05 10:25, , 4F
同步基本就是交易範圍最後的時間點才會做
08/05 10:25, 4F

08/05 10:26, , 5F
照你的例子,交易範圍超過你的程式範圍
08/05 10:26, 5F

08/05 10:26, , 6F
你要限制交易的範圍在哪
08/05 10:26, 6F
回 swpoker,交易範圍是掛在 test1() 裡面 (是用 spring 的 proxy 做 transaction) 所以我覺得很奇怪...

08/05 15:56, , 7F
1.是container managed persistence才會有這種現象
08/05 15:56, 7F

08/05 15:56, , 8F
application managed persistence就要自己處理了
08/05 15:56, 8F
同樣 framework (spring + hibernate) 及 server (tomcat) 的專案 一個需要 update 才會 commit,一個會自動 commit... phstudy 說的 container 是指 server 嗎? 我沒有去詳細觀察兩個專案的設定,會覺得奇怪是因為沒特別注意就不會發現... (當你看到大家專案都用 save 來處理 entity 時, 就會自然而然地認為要用 save 才是存入 DB) 有時間再去看設定找原因,到時候再把結果 post 出來 XD ※ 編輯: cyclone350 (123.193.192.133), 08/05/2015 21:25:31

08/05 23:00, , 9F
如果不知道CMP跟AMP差別,建議你去讀JSR338 7.6~7.8
08/05 23:00, 9F

08/05 23:01, , 10F
這裡的container是指JEE container
08/05 23:01, 10F

08/05 23:02, , 11F
標準的tomcat不是JEE container, TomEE就另當別論了
08/05 23:02, 11F

08/05 23:04, , 12F
標準的Tomcat是不支援CMP的
08/05 23:04, 12F

08/05 23:05, , 13F
另外也可以用AOP去做出類似CMP的行為
08/05 23:05, 13F

08/07 23:24, , 14F
請問是使用什麼資料庫呢? oracle預設會commit
08/07 23:24, 14F

08/07 23:25, , 15F
datasource使用apache的dbcp的話,預設是auto commit
08/07 23:25, 15F

08/07 23:28, , 16F
oracle的ucp.jar也是如此
08/07 23:28, 16F

08/07 23:28, , 17F
c3p0會幫忙rollback
08/07 23:28, 17F
文章代碼(AID): #1LmF8U5J (java)
文章代碼(AID): #1LmF8U5J (java)