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 阿薩德這條數據,類別這里就被忽略置為空

問題搞定了,自己很開心


免責聲明!

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



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