這裏的這個問題是在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
而後,咱們作了以下修改,也就是忽略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
問題搞定了,本身很開心