2
我有這樣的代碼:重置的p值:在的inputText號碼:就地當DB約束驗證失敗
<p:inplace id="staffno" editor="true">
<p:ajax event="save" listener="#{staffbean.onSave}" update="staffnoInplace messages" />
<p:inputText id="staffnoInplace" value="#{staffbean.vieweditStaff.staffno}"/>
</p:inplace>
在staffbean.onSave()我存儲此通過JPA /休眠。在成功的情況下,我不會面臨任何問題。它存儲在數據庫中。
我的問題與Hibernate由於數據庫約束引發異常的情況有關。在這些情況下,我希望將就地保持在可編輯狀態,而不是更改值。目前,它在數據庫級別上失敗,但仍然將UI對象上的值更改爲不正確的值。
我曾希望避免這種情況,因爲這意味着我必須請執行額外的DB查詢以驗證實體的存在。有沒有其他方法?我能否以其他方式扭轉bean?爲什麼依賴於約束例外是不好的? – javaMS
@javaMS'依賴於約束異常是不好的嗎?'這是一個非常好的問題,至今仍在爭論。請看這裏:http://programmers.stackexchange.com/questions/76052/constraints-in-a-relational-databases-why-not-remove-them-completely –
@javaMS在JSF的情況下,有驗證階段整個框架將根據應用程序驗證處理應用和回滾值。 JSF鼓勵這種模式,所以最好這樣做,而不管你對這個主題的感受如何。還有一點是,通過執行引用完整性,一些數據庫的執行比通過提取單個記錄的執行更差。如果表格已正確編制索引,則預取此記錄的性能損失應該很小。 –