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

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

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

    內蒙古java團隊

    j2se,j2ee開發組
    posts - 139, comments - 212, trackbacks - 0, articles - 65
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Hibernate一對一數據關聯(一)

    Posted on 2007-01-08 16:44 帥子 閱讀(385) 評論(0)  編輯  收藏 所屬分類: j2se技術專區

    Hibernate一對一數據關聯(一)

    對于ORM而言,一個重要的特性就是對實體之間關聯關系的管理。數據關聯是ORM一個重要的特征,但往往也是導致性能低下的原因,在開發中要特別注意這一點。

    一對一關聯有兩種類型:主鍵關聯和唯一外鍵關聯

    一.主鍵關聯:
    一對一主鍵關聯形式,即兩張關聯表通過主鍵形成一對一映射關系。
    例如,一個中國公民只能有一份護照。

    1.數據模型如下



    2.表定義sql
    DROP ? TABLE ?T_User;
    DROP ? TABLE ?T_Passport;

    CREATE ? TABLE ?T_Passport?(
    ???????id?
    INT ? NOT ? NULL
    ?????,?serial?
    VARCHAR ( 30 )
    ?????,?expiry?
    INT
    ?????,?
    PRIMARY ? KEY ?(id)
    );

    CREATE ? TABLE ?T_User?(
    ???????id?
    INT ? NOT ? NULL ?AUTO_INCREMENT
    ?????,?name?
    VARCHAR ( 50 )
    ?????,?age?
    INT
    ?????,?
    PRIMARY ? KEY ?(id)
    ?????,?
    INDEX ?(id)
    ?????,?
    CONSTRAINT ?FK_T_User_1? FOREIGN ? KEY ?(id)
    ??????????????????
    REFERENCES ?T_Passport?(id)
    );



    3.POJO類
    TUser.java

    package ?cn.blogjava.start;

    public ? class ?TUser?? implements ?java.io.Serializable?{
    ????
    // ?Fields????
    ????? private ?Integer?id;
    ?????
    private ?Integer?age;
    ?????
    private ?String?name;
    ?????
    private ?TPassport?passport;


    ????
    // ?Constructors

    ????
    public ?Integer?getAge()?{
    ????????
    return ?age;
    ????}

    ????
    public ? void ?setAge(Integer?age)?{
    ????????
    this .age? = ?age;
    ????}

    ????
    public ?TPassport?getPassport()?{
    ????????
    return ?passport;
    ????}

    ????
    public ? void ?setPassport(TPassport?passport)?{
    ????????
    this .passport? = ?passport;
    ????}

    ????
    /** ?default?constructor? */
    ????
    public ?TUser()?{
    ????}
    ????
    ????
    /** ?constructor?with?id? */
    ????
    public ?TUser(Integer?id)?{
    ????????
    this .id? = ?id;
    ????}
    ????
    // ?Property?accessors

    ????
    public ?Integer?getId()?{
    ????????
    return ? this .id;
    ????}
    ????
    ????
    public ? void ?setId(Integer?id)?{
    ????????
    this .id? = ?id;
    ????}

    ????
    public ?String?getName()?{
    ????????
    return ? this .name;
    ????}
    ????
    ????
    public ? void ?setName(String?name)?{
    ????????
    this .name? = ?name;
    ????}

    }


    TPassport.java

    package ?cn.blogjava.start;

    import ?java.io.Serializable;

    public ? class ?TPassport? implements ?Serializable?{
    ????
    private ?Integer?id;
    ????
    private ?String?serial;
    ????
    private ?Integer?expiry;
    ????
    private ?TUser?user;
    ????
    ????
    public ?Integer?getExpiry()?{
    ????????
    return ?expiry;
    ????}
    ????
    public ? void ?setExpiry(Integer?expiry)?{
    ????????
    this .expiry? = ?expiry;
    ????}
    ????
    public ?Integer?getId()?{
    ????????
    return ?id;
    ????}
    ????
    public ? void ?setId(Integer?id)?{
    ????????
    this .id? = ?id;
    ????}
    ????
    public ?String?getSerial()?{
    ????????
    return ?serial;
    ????}
    ????
    public ? void ?setSerial(String?serial)?{
    ????????
    this .serial? = ?serial;
    ????}
    ????
    public ?TUser?getUser()?{
    ????????
    return ?user;
    ????}
    ????
    public ? void ?setUser(TUser?user)?{
    ????????
    this .user? = ?user;
    ????}
    ????
    }


    3.配置文件
    TUser.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 >
    ????
    < class? name ="cn.blogjava.start.TUser" ?table ="T_User" ?catalog ="sample" >
    ????????
    < id? name ="id" ?type ="integer" >
    ????????????
    < column? name ="id" ? />
    ????????????
    < generator? class ="native" ? />
    ????????
    </ id >
    ????????
    < property? name ="name" ?type ="string" >
    ????????????
    < column? name ="name" ?length ="100" ?not-null ="true" ? />
    ????????
    </ property >
    ????????
    < property? name ="age" ?type ="java.lang.Integer" ?column ="age" ? />
    ????????
    < one-to-one? name ="passport" ?
    ????????????????????class
    ="cn.blogjava.start.TPassport"
    ?
    ????????????????????cascade
    ="all"
    ?
    ????????????????????outer-join
    ="true"
    ?
    ?????????
    />

    ????
    </ class >
    </ hibernate-mapping >


    TPassport.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 >
    ????
    < class? name ="cn.blogjava.start.TPassport" ?table ="T_Passport" ?catalog ="sample" >
    ????????
    < id? name ="id" ?type ="integer" ?column ="id" >
    ????????????
    < generator? class ="foreign" >
    ????????????????
    < param? name ="property" > user </ param >
    ????????????
    </ generator > ???????????
    ????????
    </ id >

    ????????
    < property? name ="serial" ?type ="string" ?column ="serial" ? />
    ????????
    < property? name ="expiry" ?type ="java.lang.Integer" ?column ="expiry" ? />
    ????????
    ????????
    < one-to-one? name ="user" ?
    ????????????????????class
    ="cn.blogjava.start.TUser"
    ?
    ????????????????????constrained
    ="true"

    ?????????
    />
    ????
    </ class >
    </ hibernate-mapping >


    4.測試代碼

    package ?cn.blogjava.start;

    import ?java.util.List;

    import ?junit.framework.Assert;
    import ?junit.framework.TestCase;

    import ?org.hibernate.HibernateException;
    import ?org.hibernate.Session;
    import ?org.hibernate.SessionFactory;
    import ?org.hibernate.Transaction;
    import ?org.hibernate.cfg.Configuration;


    public ? class ?HibernateTest? extends ?TestCase?{
    ????
    ????Session?session?
    = ? null ;
    ???? protected ? void ?setUp()?{
    ????????
    try ?{

    ????????????Configuration?config? = ? new ?Configuration().configure();
    ????????????SessionFactory?sessionFactory?
    = ?config.buildSessionFactory();
    ????????????session?
    = ?sessionFactory.openSession();
    ????????????
    ????????}?
    catch ?(HibernateException?e)?{
    ????????????e.printStackTrace();
    ????????}????????
    ????}

    ???? protected ? void ?tearDown()?{
    ????????
    try ?{
    ????????????session.close();????????
    ????????}?
    catch ?(HibernateException?e)?{
    ???????????e.printStackTrace();
    ????????}????????
    ????}????
    ????
    ???? public ? void ?testInsert()?{
    ????????Transaction?tran?
    = ? null ;
    ????????
    try ?{
    ????????
    ????????????TUser?user?
    = ? new ?TUser();
    ????????????user.setName(
    " byf " );
    ????????????user.setAge(
    new ?Integer( 26 ));
    ????????????
    ????????????TPassport?passport?
    = ? new ?TPassport();
    ????????????passport.setSerial(
    " PCN123456 " );
    ????????????passport.setExpiry(
    new ?Integer( 20081010 ));
    ????????????
    ????????????
    // 設置相互關聯
    ????????????user.setPassport(passport);
    ????????????passport.setUser(user);

    ????????????tran?
    = ?session.beginTransaction();
    ????????????session.save(user);
    ????????????session.flush();
    ????????????tran.commit();
    ????????????Assert.assertEquals(user.getId().intValue()
    > 0 ?, true );
    ????????}?
    catch ?(HibernateException?e)?{
    ????????????e.printStackTrace();
    ????????????Assert.fail(e.getMessage());
    ????????????
    if (tran? != ? null )?{
    ????????????????
    try ?{
    ????????????????????tran.rollback();
    ????????????????}?
    catch ?(Exception?e1)?{
    ????????????????????e1.printStackTrace();
    ????????????????}
    ????????????}
    ????????}
    ????}
    ????
    ????
    /**
    ?????*?對象讀取測試(Select方法)
    ?????
    */ ????????????
    ????
    public ? void ?testSelect(){
    ????????String?hql?
    = ? " ?from?TUser?where?name='byf' " ;
    ????????
    try ?{
    ????????????List?userList?
    = ?session.createQuery(hql).list();
    ????????????TUser?user?
    = ?(TUser)userList.get( 0 );
    ????????????System.out.println(
    " user?name?is? " ? + ?user.getName());
    ????????????System.out.println(
    " passport?serial?NO.?is? " ? + ?user.getPassport().getSerial());
    ????????????Assert.assertEquals(user.getName(),?
    " byf " );
    ????????}?
    catch ?(Exception?e)?{
    ????????????e.printStackTrace();
    ????????????Assert.fail(e.getMessage());
    ????????}
    ????}
    }
    主站蜘蛛池模板: 亚洲av无码av在线播放| 亚洲视频在线观看免费视频| 国产AV旡码专区亚洲AV苍井空| 成年女性特黄午夜视频免费看| 亚洲日本精品一区二区| 色欲A∨无码蜜臀AV免费播| 亚洲一区综合在线播放| 9277手机在线视频观看免费| 亚洲激情视频网站| 黄色成人网站免费无码av| 亚洲字幕AV一区二区三区四区 | 亚洲精品无码成人| 日本免费观看网站| 新最免费影视大全在线播放| 亚洲线精品一区二区三区影音先锋| 中国精品一级毛片免费播放| 亚洲AV无码乱码在线观看裸奔| 在线成人爽a毛片免费软件| 亚洲国产精品专区| 国产美女无遮挡免费视频网站 | 国产在线ts人妖免费视频| 一进一出60分钟免费视频| 国产亚洲美女精品久久久久狼| 一级毛片在线观看免费| 亚洲精品中文字幕无乱码麻豆| 四虎永久在线免费观看| 国产一区二区三区免费观看在线| 亚洲国产精品自在线一区二区| 日韩欧美一区二区三区免费观看| 看Aⅴ免费毛片手机播放| 99在线精品视频观看免费| 亚洲精品无码成人片久久不卡| ZZIJZZIJ亚洲日本少妇JIZJIZ| 毛片在线播放免费观看| 色偷偷女男人的天堂亚洲网| 亚洲AV无码之日韩精品| 91人人区免费区人人| 国产成人亚洲综合无| 亚洲第一视频网站| 日本人护士免费xxxx视频| 日本免费电影一区二区|