nested exception is org.hibernate.ObjectNotFoundException

这里的这个问题是在hibernate中出现的,这个错误感受颇有意思java

首先这里有两个类,对应两个表,咱们在表中并无创建    主外键的联系,由于级联删除,对数据影响太差sql

 

下面这一段是 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>

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

而后咱们这里 删除了某个类别category信息,这里面由于没有级联,因此咱们这些类别category对应的goods并无删除ide

而后咱们这里调用查询方法spa

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

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

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]

而后,咱们作了以下修改,也就是忽略code

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

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

 

 

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 阿萨德这条数据,类别这里就被忽略置为空ci

问题搞定了,本身很开心

相关文章
相关标签/搜索