zoukankan      html  css  js  c++  java
  • 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;

    "喜欢就像乘法一样,只要一方为零,结果便为零。"

  • 相关阅读:
    15年双11手淘前端技术分享(转)
    高程第9章 客户端检测
    高程8.4 screen对象 8.5history对象 8.6小结
    高程8.2location对象 8.3navigator对象
    高程第8章 BOM 8.1window对象
    高程 7.3 模仿块级作用域 7.4私有变量 7.5小结
    高程 第7章函数表达式 7.1递归 7.2闭包
    23、GoAccess分析Nginx日志
    11、Nginx反向代理服务
    10、LNMP架构
  • 原文地址:https://www.cnblogs.com/yanggb/p/11168313.html
Copyright © 2011-2022 走看看