<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhyiwww
    用平實的筆,記錄編程路上的點點滴滴………
    posts - 536,comments - 394,trackbacks - 0

    ??????版權(quán)所有,轉(zhuǎn)載請注明出處zhyiwww@163.com

    我的使用背景:

    v??????? 有新聞和新聞類型,一條新聞只能屬于一個類型,一種新聞類型可以對應(yīng)多條新聞。

    v??????? 在數(shù)據(jù)庫中,新聞受新聞類型外鍵約束,并可以級聯(lián)刪除

    v??????? Hibernate 中,實現(xiàn)級聯(lián)刪除

    v??????? jkakfl

    ?

    (一) 創(chuàng)建數(shù)據(jù)庫表和關(guān)系

    DROP? TABLE? NewsType;

    CREATE? TABLE NewsType

    (

    ?????? TypeID? NUMBER(10) PRIMARY KEY? NOT NULL,

    ?????? TypeName? VARCHAR2(400) NOT NULL,

    ?????? DirName?? VARCHAR2(400) NOT NULL,

    ?????? TemplateName VARCHAR2(400) NOT NULL

    );

    DROP? SEQUENCE NEWSTYPE_SEQ;

    CREATE? SEQUENCE NEWSTYPE_SEQ? INCREMENT BY 1 START WITH 1;

    ?

    DROP? TABLE? News;

    CREATE? TABLE? News

    (

    ?????? NewsID? NUMBER(10) PRIMARY KEY NOT NULL,

    ??????? TypeID? NUMBER(10) NOT NULL,

    ?????? Title? VARCHAR2(400) NOT NULL,

    ?????? HitCount NUMBER(10) DEFAULT? 0 NOT NULL,

    ?????? IssuseDate? DATE NOT NULL,

    ?????? DeployerID? NUMBER(10) NOT? NULL,

    ?????? Origin? VARCHAR2(400)? NOT? NULL,

    ?????? URL? VARCHAR2(400) NOT NULL,

    ?????? KEYWORDS VARCHAR(400) ,

    ??????? Priority? NUMBER(10)? DEFAULT? 0 NOT NULL,

    ?????? Special? VARCHAR2(400) ,

    ?????? Description? VARCHAR2(400),

    ?????? Author? VARCHAR2(400),

    ?????? Topic?? VARCHAR2(400)

    );

    DROP SEQUENCE NEWS_SEQ;

    CREATE SEQUENCE NEWS_SEQ? INCREMENT BY? 1 START WITH 1;

    ?news-type-relation1.jpg

    oralce 中,設(shè)置數(shù)據(jù)表的約束關(guān)系如下圖:

    ???
    ???(二)
    實現(xiàn)數(shù)據(jù)表到 POJO 的映射

    映射類,我們略去,此處主要顯示配置文件

    ü???????? News.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    ??????????????????????????? "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    <!-- DO NOT EDIT: This is a generated file that is synchronized -->

    <!-- by MyEclipse Hibernate tool integration.?????????????????? -->

    <!-- Created Fri Nov 11 21:59:47 CST 2005???????????????????????? -->

    <hibernate-mapping package="com.scenechina.vr.model">

    ?????? <class name="News" table="NEWS" lazy="false">

    ?????? ?????? <id name="newsid" column="NEWSID" type="java.lang.Long">

    ?????? ?????? ?????? <generator class="sequence">

    ?????? ?????? ?????? ?????? <param name="sequence">NEWS_SEQ</param>

    ?????? ?????? ?????? </generator>

    ?????? ?????? </id>

    ?????? ?????? <property name="typeid" column="TYPEID" type="java.lang.Long" not-null="true"/>

    ?????? ?????? <property name="title" column="TITLE" type="java.lang.String" not-null="true"/>

    ?????? ?????? <property name="hitcount" column="HITCOUNT" type="java.lang.Long" not-null="true"/>

    ?????? ?????? <property name="issusedate" column="ISSUSEDATE" type="java.util.Date" not-null="true"/>

    ?????? ?????? <property name="deployerid" column="DEPLOYERID" type="java.lang.Long" not-null="true"/>

    ?????? ?????? <property name="origin" column="ORIGIN" type="java.lang.String" not-null="true"/>

    ?????? ?????? <property name="url" column="URL" type="java.lang.String" not-null="true"/>

    ?????? ?????? <property name="keywords" column="KEYWORDS" type="java.lang.String"/>

    ?????? ?????? <property name="priority" column="PRIORITY" type="java.lang.Long" not-null="true"/>

    ?????? ?????? <property name="special" column="SPECIAL" type="java.lang.String"/>

    ?????? ?????? <property name="description" column="DESCRIPTION" type="java.lang.String"/>

    ?????? ?????? <property name="author" column="AUTHOR" type="java.lang.String"/>

    ?????? ?????? <property name="topic" column="TOPIC" type="java.lang.String"/>

    ?????? ?????? <set name="newsset" cascade="all" inverse="true" lazy="false" order-by="NEWSDETIALID" table="Newsdetials">

    ?????? ?????? ?????? <key column="newsid"/>

    ?????? ?????? ?????? <one-to-many class="Newsdetials"/>

    ?????? ?????? </set>

    ?????? ?????? <set name="picset" cascade="all" inverse="true" lazy="false" table="Picture">

    ?????? ?????? ?????? <key column="newsid"/>

    ?????? ?????? ?????? <one-to-many class="Picture"/>

    ?????? ?????? </set>

    ????? ????? <many-to-one name="newstype" column="TYPEID" entity-name="com.model.Newstype" insert="false" update="false"/>

    ?????? </class>

    </hibernate-mapping>

    ?

    ü???????? Newstype.hbm.xml

    <?xml version="1.0"?>

    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    ??? "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    <hibernate-mapping>

    ?????? <!--

    ??? Created by the Middlegen Hibernate plugin

    ?

    ??? http://boss.bekk.no/boss/middlegen/

    ??? http://hibernate.sourceforge.net/

    -->

    ?????? <class name="com.scenechina.vr.model.Newstype" table="NEWSTYPE" lazy="false">

    ?????? ?????? <id name="typeid" type="java.lang.Long" column="TYPEID">

    ?????? ?????? ?????? <generator class="assigned"/>

    ?????? ?????? </id>

    ?????? ?????? <property name="typename" type="java.lang.String" column="TYPENAME" not-null="true" length="100"/>

    ?????? ?????? <property name="dir" type="java.lang.String" column="DIRNAME" not-null="true" length="100"/>

    ?????? ?????? <property name="templatename" type="java.lang.String" column="TEMPLATENAME" not-null="true" length="100"/>

    ?????? ?????? <!-- associations -->

    ????? ????? <set name="news" cascade="all-delete-orphan" inverse="true">

    ????? ????? ????? <key column="TYPEID"/>

    ????? ????? ????? <one-to-many class="com.model.News"/>

    ????? ????? </set>

    ?????? </class>

    </hibernate-mapping>

    ?

    其實這是個雙向以對多關(guān)系。

    ?

    (三) DAO 中實現(xiàn)級聯(lián)刪除

    ??????? // 刪除新聞類型記錄

    ??????? dao.getNewsTypeDAO().deleteObjects(typeIDs);

    typeID 是新聞類型的主鍵

    執(zhí)行此操作將會刪除所有此新聞類型的新聞。

    news 是一個 Set 類型的變量,用來存放此類型的所有的新聞。

    (四) 刪除時遇到的問題

    在數(shù)據(jù)庫中,如果設(shè)置了約束關(guān)系,那么一定要允許級聯(lián)刪除,否則,你在執(zhí)行刪除時會拋出異常。

    如果我們的數(shù)據(jù)庫關(guān)系設(shè)置如下:

    news-type-relation2.jpg
    ???畫圈的那個選項沒有選上的話
    ,那么我們在執(zhí)行的時候就會拋出如下的異常:

    006-04-06 13:20:16 ERROR [http-8080-Processor23] (JDBCExceptionReporter.java:72

    ?- ORA-02292: 違反完整約束條件 (SC.NEWS_TYPE_RELATIONS) - 已找到子記錄日志

    ?

    rg.hibernate.exception.ConstraintViolationException: could not execute update q

    ery

    ?????? at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.j

    va:69)

    ?????? at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelp

    r.java:43)

    ?????? at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:8

    )

    ?

    問題的關(guān)鍵在如下兩點:

    1.?????? 數(shù)據(jù)庫中要允許數(shù)據(jù)表的級聯(lián)刪除

    2.?????? 在映射文件中要將級聯(lián)刪除配置正確

    ?

    ?



    |----------------------------------------------------------------------------------------|
                               版權(quán)聲明  版權(quán)所有 @zhyiwww
                引用請注明來源 http://www.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2006-04-06 14:12 zhyiwww 閱讀(24627) 評論(6)  編輯  收藏 所屬分類: j2ee

    FeedBack:
    # re: Hibernate實現(xiàn)級聯(lián)刪除
    2006-04-07 13:56 | zhlmmc
    數(shù)據(jù)庫中配置正確就可以了,Hibernate配置文件不設(shè)置級聯(lián)刪除一樣可以跑
    效果是一樣的。  回復(fù)  更多評論
      
    # re: Hibernate實現(xiàn)級聯(lián)刪除
    2006-04-23 21:31 | zhyiwww
    有道理,如果約束在數(shù)據(jù)庫中設(shè)定的話,效果是一樣的。  回復(fù)  更多評論
      
    # re: Hibernate實現(xiàn)級聯(lián)刪除
    2006-04-23 21:32 | zhyiwww
    不過,這是兩種不同的實現(xiàn)方法,應(yīng)該說是各自有各自的優(yōu)勢。  回復(fù)  更多評論
      
    # re: Hibernate實現(xiàn)級聯(lián)刪除
    2009-11-27 18:27 |
    我刪除的時候說是約束有問題  回復(fù)  更多評論
      
    # re: Hibernate實現(xiàn)級聯(lián)刪除
    2010-01-27 14:45 | zhip
    數(shù)據(jù)庫不設(shè)置級聯(lián)刪除也是可以的。
    只要配置了關(guān)聯(lián),以及允許級聯(lián)刪除。  回復(fù)  更多評論
      
    # re: Hibernate實現(xiàn)級聯(lián)刪除
    2011-10-16 10:55 | 嗖嗖嗖
    我用的annotaion有問題
      回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲免费观看网站| 亚洲人妖女同在线播放| 亚洲国产成人久久一区二区三区| 91成人在线免费视频| 亚洲bt加勒比一区二区| 久久免费区一区二区三波多野| 亚洲乱码无码永久不卡在线| 韩国免费A级毛片久久| 国产成人精品日本亚洲网站| a毛片在线还看免费网站| 久久精品国产精品亚洲色婷婷| 国产精品免费无遮挡无码永久视频 | 国产精品观看在线亚洲人成网| 免费看的成人yellow视频| 亚洲狠狠婷婷综合久久蜜芽| 国产精品色午夜视频免费看| 猫咪免费观看人成网站在线| 亚洲中文字幕无码一久久区| 男人j进入女人j内部免费网站| 7777久久亚洲中文字幕蜜桃| 手机在线看永久av片免费| 亚洲男同gay片| 亚洲国产成人久久综合区| 国产精品99久久免费观看| 亚洲国产模特在线播放| 国产精品无码一区二区三区免费 | 日本妇人成熟免费中文字幕| 亚洲av无码专区国产不乱码| 又粗又大又硬又爽的免费视频| 精品一区二区三区高清免费观看 | a视频在线观看免费| 亚洲大片免费观看| 国产男女猛烈无遮挡免费视频网站| 国产免费区在线观看十分钟| 亚洲∧v久久久无码精品| 好爽…又高潮了免费毛片| 男人扒开添女人下部免费视频| 久久久久久亚洲AV无码专区| 日本黄色免费观看| 无码精品人妻一区二区三区免费看| 亚洲欧洲久久精品|