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

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

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

    對于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());
    ????????}
    ????}
    }
    posted on 2006-07-05 15:08 knowhow 閱讀(3408) 評論(3)  編輯  收藏 所屬分類: ORM:Hibernate及其他
    主站蜘蛛池模板: 亚洲午夜成人精品电影在线观看| 国产三级免费观看| 午夜影视日本亚洲欧洲精品一区| 国产免费人成视频在线播放播| 国产在线19禁免费观看| 永久免费观看黄网站| 亚洲伊人久久综合中文成人网| 一级毛片在线完整免费观看| 亚洲人成无码久久电影网站| 香蕉免费看一区二区三区| 亚洲精品国产美女久久久| 亚洲免费在线播放| 亚洲一卡二卡三卡四卡无卡麻豆 | 国产一级一毛免费黄片| 亚洲乱码一区二区三区在线观看| 嫩草影院在线播放www免费观看 | 亚洲av乱码一区二区三区香蕉| 91嫩草国产在线观看免费| 亚洲va久久久久| 亚洲国产高清在线一区二区三区| 精品久久久久久国产免费了| 久久精品国产亚洲AV无码麻豆| 67194熟妇在线永久免费观看| 亚洲av中文无码乱人伦在线观看| 亚洲国产婷婷香蕉久久久久久| 日韩精品无码免费专区午夜不卡| 亚洲精品国产福利在线观看| 成人无遮挡裸免费视频在线观看| 日韩毛片在线免费观看| 亚洲伊人tv综合网色| 日本免费福利视频| 在线观看免费播放av片| 亚洲国产综合精品中文第一| 亚洲视频人成在线播放| 2015日韩永久免费视频播放| 无码天堂va亚洲va在线va| 亚洲国产天堂久久综合网站| 日韩成全视频观看免费观看高清| 成人免费无码H在线观看不卡| 亚洲三级在线视频| 亚洲区小说区激情区图片区|