hibernate中many-to-one的not-found屬性和@notfound注解


如果在Hibernate項目里面配了很多many-to-one的關聯,即使后台在查詢數據時已經作了健全性判斷,但還是會經常拋出對象找不到異常:org.hibernate.ObjectNotFoundException: No row with the given identifier exists。

比如系統在用戶的使用過程中,數據庫表的數據會常發生變化,最常見的是人員變化,原先引用的User在數據庫表沒了,而Hibernate做了多對一關聯,多的這端引用的一的那端,一旦引用值在一的那端找不到數據,默認就會拋出異常,而后台判斷卻控制不了此問題。

Hibernate Reference有介紹到,在多對一關系中,即many-to-one標簽元素中有一個屬性not-found,用來指定引用的外鍵不存在時將如何處理。

not-found屬性有兩個候選值:

1.exception(默認)拋出異常。

2.ignore,忽略異常,不拋出異常。

<many-to-one name="project" column="projId" 
        class="com.toone.yanggb.model.Project" not-found="ignore"/>

在不配置這個屬性的情況下,Hibernate會采用默認的拋出異常來處理;當配置了not-found屬性並將值設置為ignore之后,就可以取消關聯外鍵引用數據丟失拋異常的設置。

另外的,Spring/Hibernate還提供有@NotFound注解,效果和not-found屬性相當。

@NotFound(action = NotFoundAction.IGNORE)
@ManyToOne(cascade = {CascadeType.PERSIST}, targetEntity = Topic.class)
@JoinColumn(name = "topic_id", updatable = false)
@NotFound(action = NotFoundAction.IGNORE)
private Topic topic;

 

"喜歡就像乘法一樣,只要一方為零,結果便為零。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM