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

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

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

    唯一外鍵關聯
    一.單向一對一關聯
    1.數據模型如下圖所示:


    2.數據表sql
    DROP?TABLE?T_User;
    DROP?TABLE?T_Group;

    CREATE?TABLE?T_Group?(
    ???????id?
    INT?NOT?NULL?AUTO_INCREMENT
    ?????,?name?
    VARCHAR(50)
    ?????,?
    PRIMARY?KEY?(id)
    );

    CREATE?TABLE?T_User?(
    ???????id?
    INT?NOT?NULL?AUTO_INCREMENT
    ?????,?name?
    VARCHAR(50)
    ?????,?age?
    INT
    ?????,?group_id?
    INT?NOT?NULL
    ?????,?
    PRIMARY?KEY?(id)
    ?????,?
    INDEX?(group_id)
    ?????,?
    CONSTRAINT?FK_T_User_1?FOREIGN?KEY?(group_id)
    ??????????????????
    REFERENCES?T_Group?(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?TGroup?group;


    ????
    //?Constructors

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

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


    ????
    public?TGroup?getGroup()?{
    ????????
    return?group;
    ????}

    ????
    public?void?setGroup(TGroup?group)?{
    ????????
    this.group?=?group;
    ????}

    ????
    /**?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;
    ????}
    }

    TGroup.java
    package?cn.blogjava.start;

    import?java.io.Serializable;

    public?class?TGroup?implements?Serializable?{
    ????
    ????
    private?Integer?id;
    ????
    private?String?name;
    ????
    ????
    public?Integer?getId()?{
    ????????
    return?id;
    ????}
    ????
    public?void?setId(Integer?id)?{
    ????????
    this.id?=?id;
    ????}
    ????
    public?String?getName()?{
    ????????
    return?name;
    ????}
    ????
    public?void?setName(String?name)?{
    ????????
    this.name?=?name;
    ????}
    ????
    }

    3.配置文件
    hibernate.cfg.xml
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?hibernate-configuration?PUBLIC
    ????????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"
    ????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
    >
    <hibernate-configuration>
    ????
    <session-factory>
    ????????
    <property?name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    ????????
    <property?name="hibernate.connection.password">1234</property>
    ????????
    <property?name="hibernate.connection.url">jdbc:mysql://localhost:3306/sample</property>
    ????????
    <property?name="hibernate.connection.username">root</property>
    ????????
    <property?name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    ????????
    <mapping?resource="cn/blogjava/start/TUser.hbm.xml"?/>
    ????????
    <mapping?resource="cn/blogjava/start/TGroup.hbm.xml"?/>????????
    ????
    </session-factory>
    </hibernate-configuration>

    TGroup.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.TGroup"?table="T_Group"?catalog="sample">
    ????????
    <id?name="id"?type="integer">
    ????????????
    <column?name="id"?/>
    ????????????
    <generator?class="native"?/>
    ????????
    </id>
    ????????
    <property?name="name"?type="string"?column="name"?/>
    ????
    </class>
    </hibernate-mapping>

    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"?/>
    ????????
    <many-to-one?name="group"?
    ????????????????????class
    ="cn.blogjava.start.TGroup"?
    ????????????????????column
    ="GROUP_ID"
    ??????????????????? cascade="all"
    ????????????????????unique
    ="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();
    ????????}????????
    ????}????
    ????
    ????/**
    ?????*?對象持久化測試(Insert方法)
    ?????*/????????
    ????public?void?testInsert()?{
    ????????Transaction?tran?=?null;
    ????????try?{
    ????????
    ????????????TUser?user?=?new?TUser();
    ????????????user.setName("byf");
    ????????????user.setAge(new?Integer(26));
    ????????????
    ????????????TGroup?group?=?new?TGroup();
    ????????????group.setName("Admin");
    ????????????
    ?????????????? // 如果在配置文件中沒有cascade="all",就要先插入group信息
    ???????????//?tran?=?session.beginTransaction();????????????
    ???????????//?session.save(group);
    ???????????//?session.flush();
    ???????????//?tran.commit();
    ????????????????????????
    ????????????tran?=?session.beginTransaction();????????????????????
    ????????????//設置關聯
    ????????????user.setGroup(group);

    ?????????????? //插入user信息
    ????????????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("user?group?is?"?+?user.getGroup().getName());

    ????????????Assert.assertEquals(user.getName(),?"byf");
    ????????}?catch?(Exception?e)?{
    ????????????e.printStackTrace();
    ????????????Assert.fail(e.getMessage());
    ????????}
    ????}
    }

    二.雙向一對一關聯
    需要對TGroup.java和TGroup.hbm.xml文件作修改

    1.在TGroup.java中增加一個TUser類和相應的getter、setter方法
    TGroup.java
    package?cn.blogjava.start;

    import?java.io.Serializable;

    public?class?TGroup?implements?Serializable?{
    ????
    ????private?Integer?id;
    ????private?String?name;
    ????private?TUser?user;
    ????
    ????public?TUser?getUser()?{
    ????????return?user;
    ????}
    ????public?void?setUser(TUser?user)?{
    ????????this.user?=?user;
    ????}

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

    2.在TGroup.hbm.xml中增加one-to-one配置
    <?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.TGroup"?table="T_Group"?catalog="sample">
    ????????
    <id?name="id"?type="integer">
    ????????????
    <column?name="id"?/>
    ????????????
    <generator?class="native"?/>
    ????????
    </id>
    ????????
    <property?name="name"?type="string"?column="name"?/>
    ????????
    <one-to-one?
    ?????????????????????
    name="user"

    ?????????????????????class
    ="cn.blogjava.start.TUser"
    ?????????????????????property-ref
    ="group"
    ?????????????????????
    />
    ????
    </class>
    </hibernate-mapping>

    這樣就實現了雙向關聯。可以實現雙向查詢
    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();
    ????????}????????
    ????}????
    ????
    ????
    /**
    ?????*?對象持久化測試(Insert方法)
    ?????
    */????????
    ????
    public?void?testInsert()?{
    ????????Transaction?tran?
    =?null;
    ????????
    try?{
    ????????
    ????????????TUser?user?
    =?new?TUser();
    ????????????user.setName(
    "byf");
    ????????????user.setAge(
    new?Integer(26));
    ????????????
    ????????????TGroup?group?
    =?new?TGroup();
    ????????????group.setName(
    "Admin");
    ????????????
    ??????????????????????
    ????????????tran?
    =?session.beginTransaction();????????????????????
    ????????????
    //設置關聯
    ????????????user.setGroup(group);

    ????????????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'"
    ;
    ????????String?hql2?
    =?"?from?TGroup?where?name='admin'"
    ;
    ????????
    try
    ?{
    ????????????List?userList?
    =
    ?session.createQuery(hql).list();
    ????????????TUser?user?
    =?(TUser)userList.get(0
    );
    ????????????System.out.println(
    "user?name?is?"?+
    ?user.getName());
    ????????????System.out.println(
    "user?group?is?"?+
    ?user.getGroup().getName());
    ????????????Assert.assertEquals(user.getName(),?
    "byf"
    );
    ????????????
    ????????????List?groupList?
    =
    ?session.createQuery(hql2).list();
    ????????????TGroup?group?
    =?(TGroup)groupList.get(0
    );
    ????????????System.out.println(
    "group?name?is?"?+
    ?group.getName());
    ????????????System.out.println(
    "group?user?is?"?+
    ?group.getUser().getName());
    ????????????Assert.assertEquals(group.getUser().getName(),?
    "byf"
    );????????????
    ????????}?
    catch
    ?(Exception?e)?{
    ????????????e.printStackTrace();
    ????????????Assert.fail(e.getMessage());
    ????????}
    ????}

    }
    posted on 2006-07-05 15:11 knowhow 閱讀(445) 評論(0)  編輯  收藏 所屬分類: ORM:Hibernate及其他
    主站蜘蛛池模板: 亚洲国产成人精品电影| 久久久婷婷五月亚洲97号色| 亚洲中文无码mv| 性xxxxx免费视频播放| 亚洲日本在线播放| 国产精品入口麻豆免费观看| 亚洲成AV人综合在线观看| h视频在线免费看| 亚洲性线免费观看视频成熟| 嫩草影院在线免费观看| 亚洲第一成年网站视频| 亚洲av无码专区在线观看素人| 小说专区亚洲春色校园| 亚洲午夜精品第一区二区8050| A级毛片成人网站免费看| 亚洲va在线va天堂va不卡下载| 18pao国产成视频永久免费| 亚洲国产成a人v在线观看| 最近免费中文字幕4| 美女视频黄频a免费| 亚洲日韩精品无码一区二区三区| 久久福利青草精品资源站免费| 亚洲综合久久1区2区3区| 91频在线观看免费大全| 亚洲AV无码一区二区乱子仑| jlzzjlzz亚洲乱熟在线播放| 无码人妻一区二区三区免费看 | 国产久爱免费精品视频| 亚洲AV人无码综合在线观看 | 一级毛片在线免费观看| 亚洲精品在线网站| 国产一区二区三区在线观看免费 | 99re6热视频精品免费观看| 国产亚洲sss在线播放| 免费人成在线观看视频播放| 黄色网站软件app在线观看免费| 亚洲无成人网77777| 亚洲精品视频免费| 手机在线看永久av片免费| 一区二区三区免费高清视频| 亚洲一区二区久久|