內(nèi)蒙古java團(tuán)隊(duì)

          j2se,j2ee開發(fā)組
          posts - 139, comments - 212, trackbacks - 0, articles - 65
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          Hibernate一對一數(shù)據(jù)關(guān)聯(lián)(二) 唯一外鍵關(guān)聯(lián)
          一.單向一對一關(guān)聯(lián)
          1.數(shù)據(jù)模型如下圖所示:


          2.數(shù)據(jù)表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)
          );

          </DIV>
          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;
          ????}
          ????
          }
          </DIV>
          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>
          </DIV>
          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>
          </DIV>
          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>
          </DIV>
          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();????????????????????
          ????????????//設(shè)置關(guān)聯(lián)
          ????????????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());
          ????????}
          ????}
          }

          評論

          # re: Hibernate一對一數(shù)據(jù)關(guān)聯(lián)(二) 唯一外鍵關(guān)聯(lián)  回復(fù)  更多評論   

          2008-08-27 17:51 by qin
          怎么不行呢??

          # re: Hibernate一對一數(shù)據(jù)關(guān)聯(lián)(二) 唯一外鍵關(guān)聯(lián)  回復(fù)  更多評論   

          2009-06-21 08:56 by
          如果我想插入TUser表呢?Hibernate怎么插入?
          主站蜘蛛池模板: 沈丘县| 五河县| 青海省| 丘北县| 缙云县| 石狮市| 杭州市| 太仓市| 麟游县| 永善县| 泰安市| 临汾市| 横山县| 泰顺县| 玛多县| 彭泽县| 镇沅| 宁德市| 库伦旗| 漯河市| 荥经县| 阜平县| 拉萨市| 隆尧县| 龙海市| 烟台市| 青海省| 巨野县| 栖霞市| 柳江县| 宾阳县| 龙门县| 六盘水市| 武功县| 志丹县| 泗水县| 巴马| 洛扎县| 汕头市| 大宁县| 夏河县|