亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 3.6 更新到 Hibernate 5.1 會產生傳遞給驅逐異常的非實體對象實例

從 3.6 更新到 Hibernate 5.1 會產生傳遞給驅逐異常的非實體對象實例

牛魔王的故事 2023-08-09 16:04:05
我正在使用一個 hibernate 3.6 項目,該項目使用注釋進行映射,現在我將其遷移到 hibernate 5.1,并且我遇到了這個運行時異常 Non-entity object instance pass to evict 下面是對 evict 的調用HibernateUtils.getSession().evict(origProject.getProbidinfo());HibernateUtils.getSession().evict(origProject);下面是引發異常的 DefaultEvictEventListener.class 的代碼EntityPersister persister = null;                final String entityName = persistenceContext.getSession().guessEntityName( object );                if ( entityName != null ) {                    try {                        persister = persistenceContext.getSession().getFactory().getEntityPersister( entityName );                    }                    catch (Exception ignore) {                    }                }                if ( persister == null ) {                    throw new IllegalArgumentException( "Non-entity object instance passed to evict : " + object );                }在我的 hibernate 5.1 中,持久化器為 null。如果不清楚,我可以提供更多詳細信息
查看完整描述

2 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

在版本 4.2 之前,hibernate 會忽略異常“傳遞給驅逐的非實體對象實例”,該異?,F在會拋出:

java.lang.IllegalArgumentException:傳遞給驅逐的非實體對象實例。

在 4.2 之前的 hibernate 版本中,由于DefaultEvictEventListener.java#L91-L94沒有 else 部分,因此它被忽略。

從版本 4.2 開始,添加了 else 部分,如我們在DefaultEvictEventListener.java#L99-L115中看到的那樣。

在研究這個錯誤之后,我在網上找到的唯一建議是我們捕獲并忽略這個異常。

然而,即使它不是一個完美的解決方案,我認為,省略導致異常的 evict 調用是我更喜歡的,因為我可以將其放在緩存中。


查看完整回答
反對 回復 2023-08-09
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

Hibernate 檢查您傳遞的對象是實體,因此它不想逐出或分離任何對象(在我的例子中是 ArrayList)或除實體之外的 null。

我更喜歡對解決方案進行空檢查或類型檢查,而不是捕獲并忽略


查看完整回答
反對 回復 2023-08-09
  • 2 回答
  • 0 關注
  • 320 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號