zoukankan      html  css  js  c++  java
  • nested exception is org.hibernate.ObjectNotFoundException

    这里的这个问题是在hibernate中出现的,这个错误感觉很有意思

    首先这里有两个类,对应两个表,我们在表中并没有建立    主外键的联系,因为级联删除,对数据影响太差

    下面这一段是 hibernate 配置商品和类别的关系

    <hibernate-mapping package="com.czd.shopping.pojo">
        <class name="Goods" table="goods">
            <id name="gid" type="java.lang.Integer">
                <column name="gid" />
                <generator class="native"></generator>
            </id>
            <property name="gname" type="java.lang.String">
                <column name="gname" length="20" />
            </property>
            <property name="gprice" type="java.lang.Double">
                <column name="gprice" precision="8" />
            </property>
            <property name="gpic" type="java.lang.String">
                <column name="gpic" length="200" />
            </property>
            <property name="gremark" type="java.lang.String">
                <column name="gremark" />
            </property>
            <property name="gxremark" type="java.lang.String">
                <column name="gxremark" />
            </property>
            <property name="gdate" type="java.sql.Timestamp">
                <column name="gdate" length="19" />
            </property>
            <property name="gcommend" type="java.lang.Boolean">
                <column name="gcommend" />
            </property>
            <property name="gopen" type="java.lang.Boolean">
                <column name="gopen" />
            </property>
            
            <!-- 多对一的关系,尽量在代码中配置关系,让数据库少关联,这样数据库效率会提升 -->
            <many-to-one name="category" class="Category" lazy="false" >
                <column name="cid" />
            </many-to-one>
        </class>
    </hibernate-mapping>

    我们配置了一个 多对一,多个商品属于一个类别

    然后我们这里 删除了某个类别category信息,这里面因为没有级联,所以我们这些类别category对应的goods并没有删除

    然后我们这里调用查询方法

    hibernateTemplate.findByNamedParam("FROM Goods g WHERE g.gname LIKE :gname", "gname", "%"+gname+"%");

    当我们执行的时候就会报错,错误代码

    No row with the given identifier exists: [com.czd.shopping.pojo.Category#0]; nested exception is org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.czd.shopping.pojo.Category#0]

    然后,我们做了如下修改,也就是忽略

            <many-to-one name="category" class="Category" lazy="false" not-found="ignore">
                <column name="cid" />
            </many-to-one>

    然后我们要分析下原因,错误说明是,我们并没有提供category这个类别的主键,其实我们在查询goods但是由于这些goods的category属性已经被删除,也就可以说,这里是一些脏数据,那么 hibernate这里的映射文件就帮我们巧妙的避免了脏数据,就是将我们没有的数据 忽略掉,这里给你们看一些正确处理查询后的数据

    20    撒旦法    123.0    2017-03-22 22:05:42        true    男士休闲    更新    删除
    21    阿萨德    123.0    2017-03-22 22:07:51        true            更新    删除
    22    上单     23.0     2017-03-22 22:13:33        true    男士休闲    更新    删除

    这里21 阿萨德这条数据,类别这里就被忽略置为空

    问题搞定了,自己很开心

  • 相关阅读:
    配置win 10 邮件 账户同步,适用所有邮件商(QQ,189等)
    OBS 捕获显示器黑屏解决办法(已解决,win10)
    备份,基于规则行业分类
    layui 两级表头 代码观赏
    java 保存 json 格式文件代码函数,可直接使用
    layui 二级表头 示例代码
    python 处理文件路径(已知路径,获得后缀,文件名称)
    从Infinity Fabric到Infinity Architecture
    Turing Award 2020-奠定了编译器设计的基础
    Understanding Intel Ice Lake Processor
  • 原文地址:https://www.cnblogs.com/obesityspace/p/6613950.html
Copyright © 2011-2022 走看看