2014-01-26 94 views
0

根據這兩個函數我有一個奇怪的「問題」。 我有一個EJB容器,無狀態的,我有我的功能,使插入,更新,刪除選擇到我的數據庫。JPA堅持刷新功能

我有我的表在實體,所以上述操作使用這些實體,除了一些選擇。我正在面臨的問題是,直到現在(AppServer glassfish)我只使用.persist()函數,並且如果有任何違規問題(px比表格的列長度更大的「字符串」),那麼我的嘗試catch(Exception e)塊捕獲這些問題,並且我可以向EJB發送一個更加強烈的消息/異常,該消息/異常稱爲特定函數,因此也稱爲最初稱爲該函數的web服務。

現在與JBoss我無法捕捉同樣的excpetion和代碼返回一個回滾異常。當我在每個函數的末尾添加.flush()函數時,我可以捕獲異常並且一切正常。

(當然,在這兩種情況下,回滾工作正如我想做的那樣) 我已經讀過,持續數據保留在緩存中,而java正在決定何時在數據庫中執行實際操作,以及何時調用刷新,然後強制兌現動作在數據庫中完成。

我的問題是,爲什麼會發生這種情況?我的意思是什麼從一個appServer改變到另一個具有相同的代碼,並且大多如何如果我不能捕捉異常最終web服務獲得異常

+1

它不太兼容似乎比:-( – Leo

+0

也許你應該在數據持久化之前驗證你的數據並避免任何異常。你有沒有考慮使用[Bean Valudation](https://jcp.org/en/jsr/detail?id=349)[Hibernate Validator Implementation ](http://hibernate.org/validator/)? –

+0

@EdwinDalorzo糾正我,如果我錯了,在我的實體類我有註釋@大小(最小= 1,最大= 30),我「從它得到它」 DB as我從我的數據庫創建實體。我想,當我創建我的實體時,我必須以某種方式使這個「限制」活動? – GeoPapa

回答

0

答案在於每個應用程序如何管理與JPA相關的操作。根據定義,JPA只是一個API。市場上有不同的JPA提供商,例如Hibernate,OpenJPA,EclipseLink,...因此,根據每個應用服務器使用的默認JPA提供商,您可能會在處理某些操作時遇到一些差異。

FYI:根據到JBoss AS 6的文檔,這是絕對正常的,你得到一個RollbackException,因爲它在提交被拋出()方法失敗

JBoss RollbackException documentation