我正在做一個Primefaces的Web項目,它發送並從使用JPA的遠程EJB獲取數據。我得到這個代碼來處理的獨特價值,在實體Bean設置unique=true
後:如何從JPA唯一約束違規中獲取值?
try{
emsave.persist(newItem);
} catch (PersistenceException pe){
System.out.println("dupe found");
}
然後我回滾事務。 在Eclipse控制檯我得到這些消息從JBoss作爲:
09:15:12,179 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8189-6) SQL Error: 1062, SQLState: 23000
09:15:12,179 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8189-6) Duplicate entry 'asdasd' for key 'username'
我要送,不能保存回前端對象,並在表格中顯示出來,或在表某種程度上標誌着他們如此該用戶知道他必須改變什麼。我有辦法怎麼做,但我不知道如何標記什麼領域有壞的價值。是否有可能得到這個'用戶名'字段填寫不正確,從這個異常,或者應該使用其他方式?我正在尋找最優雅的解決方案。
在flush()期間拋出異常的好處。 – AlexR
我只發佈了一小段代碼,我稍後回滾事務,但我仍然循環直到數據結束,所以我不能發回所有錯誤的東西。它只是這個應用程序將來會被很多用戶使用,我的意思是ALOT,所以我想限制完成的查詢量。這個特定的表格可能會被管理員使用,很少,但我仍然在尋找最好的方式來做事。因此,檢查唯一身份的最佳方法是在每次插入/更新之前進行查詢以檢查欺騙? – Candyman
不,我立即得到異常,但由於我使用的是實體事務,通過捕獲這個事務被做成rollBackOnly,所以.commit()會導致我一個真正的錯誤,使EJB中斷。 – Candyman