zhyiwww
          用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
          posts - 536,comments - 394,trackbacks - 0

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

          我的使用背景:

          v??????? 有新聞和新聞?lì)愋停粭l新聞只能屬于一個(gè)類型,一種新聞?lì)愋涂梢詫?duì)應(yīng)多條新聞。

          v??????? 在數(shù)據(jù)庫中,新聞受新聞?lì)愋屯怄I約束,并可以級(jí)聯(lián)刪除

          v??????? Hibernate 中,實(shí)現(xiàn)級(jí)聯(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)系如下圖:

          ???
          ???(二)
          實(shí)現(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>

          ?

          其實(shí)這是個(gè)雙向以對(duì)多關(guān)系。

          ?

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

          ??????? // 刪除新聞?lì)愋陀涗?/span>

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

          typeID 是新聞?lì)愋偷闹麈I

          執(zhí)行此操作將會(huì)刪除所有此新聞?lì)愋偷男侣劇?/span>

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

          (四) 刪除時(shí)遇到的問題

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

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

          news-type-relation2.jpg
          ???畫圈的那個(gè)選項(xiàng)沒有選上的話
          ,那么我們?cè)趫?zhí)行的時(shí)候就會(huì)拋出如下的異常:

          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)鍵在如下兩點(diǎn):

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

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

          ?

          ?



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

          FeedBack:
          # re: Hibernate實(shí)現(xiàn)級(jí)聯(lián)刪除
          2006-04-07 13:56 | zhlmmc
          數(shù)據(jù)庫中配置正確就可以了,Hibernate配置文件不設(shè)置級(jí)聯(lián)刪除一樣可以跑
          效果是一樣的。  回復(fù)  更多評(píng)論
            
          # re: Hibernate實(shí)現(xiàn)級(jí)聯(lián)刪除
          2006-04-23 21:31 | zhyiwww
          有道理,如果約束在數(shù)據(jù)庫中設(shè)定的話,效果是一樣的。  回復(fù)  更多評(píng)論
            
          # re: Hibernate實(shí)現(xiàn)級(jí)聯(lián)刪除
          2006-04-23 21:32 | zhyiwww
          不過,這是兩種不同的實(shí)現(xiàn)方法,應(yīng)該說是各自有各自的優(yōu)勢(shì)。  回復(fù)  更多評(píng)論
            
          # re: Hibernate實(shí)現(xiàn)級(jí)聯(lián)刪除
          2009-11-27 18:27 |
          我刪除的時(shí)候說是約束有問題  回復(fù)  更多評(píng)論
            
          # re: Hibernate實(shí)現(xiàn)級(jí)聯(lián)刪除
          2010-01-27 14:45 | zhip
          數(shù)據(jù)庫不設(shè)置級(jí)聯(lián)刪除也是可以的。
          只要配置了關(guān)聯(lián),以及允許級(jí)聯(lián)刪除。  回復(fù)  更多評(píng)論
            
          # re: Hibernate實(shí)現(xiàn)級(jí)聯(lián)刪除
          2011-10-16 10:55 | 嗖嗖嗖
          我用的annotaion有問題
            回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 天柱县| 五大连池市| 青冈县| 松原市| 邳州市| 迁西县| 宜宾市| 巨野县| 尚义县| 汤原县| 南部县| 越西县| 兴义市| 布尔津县| 抚顺市| 龙游县| 商都县| 北京市| 托克托县| 宣化县| 读书| 伊宁县| 宁陕县| 汉源县| 黄浦区| 阿图什市| 遂溪县| 明水县| 周至县| 赣榆县| 镇坪县| 鄂托克旗| 定结县| 潜山县| 资源县| 玛纳斯县| 肇源县| 胶南市| 巴东县| 东源县| 大埔县|