ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HQL many-to-one 属性not-found, 引用外键记录不存在

2021-11-22 11:34:03  阅读:214  来源: 互联网

标签:Hibernate many 外键 HQL 引用 抛出 found 异常 属性


如果在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;

标签:Hibernate,many,外键,HQL,引用,抛出,found,异常,属性
来源: https://www.cnblogs.com/smallfa/p/15587731.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有