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

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

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

    Hibernate一對一數(shù)據(jù)關聯(lián)(二)

    唯一外鍵關聯(liá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)
    );


    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();                    
                //設置關聯(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());
            }
        }
    }

    二.雙向一對一關聯(lián)
    需要對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>

    這樣就實現(xiàn)了雙向關聯(lián)??梢詫崿F(xiàn)雙向查詢
    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();                    
                
    //設置關聯(lián)
                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-03 17:24 baim 閱讀(485) 評論(0)  編輯  收藏 所屬分類: 開源軟件框架

    <2006年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導航

    常用鏈接

    隨筆分類(27)

    隨筆檔案(28)

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲色偷拍区另类无码专区| 亚洲av中文无码乱人伦在线r▽| 乱人伦中文视频在线观看免费| 久久久青草青青亚洲国产免观| 可以免费看黄视频的网站| 精品在线免费视频| 亚洲av无码乱码国产精品fc2| 国内精自视频品线六区免费| 精品免费AV一区二区三区| 久久久无码精品亚洲日韩按摩| 真实乱视频国产免费观看 | 亚洲国产AV一区二区三区四区 | 亚洲乱码中文字幕综合| 青娱乐免费视频在线观看| 免费人成在线观看播放a| 久久久亚洲AV波多野结衣| vvvv99日韩精品亚洲| 亚洲免费在线视频播放| 一级毛片免费播放男男| 亚洲入口无毒网址你懂的| 亚洲免费人成在线视频观看| 最近免费中文字幕视频高清在线看 | 亚洲熟妇无码久久精品| 亚洲免费日韩无码系列 | 国产无遮挡吃胸膜奶免费看| 日韩在线永久免费播放| 成人免费网站视频www| ass亚洲**毛茸茸pics| 亚洲国产精彩中文乱码AV| 免费大黄网站在线看| 好先生在线观看免费播放| 久久成人免费播放网站| 免费的黄色网页在线免费观看| 亚洲伊人久久大香线蕉| 亚洲午夜在线电影| 亚洲国产精品VA在线看黑人| 亚洲无码精品浪潮| 亚洲不卡AV影片在线播放| 日韩中文字幕免费| 久九九精品免费视频| 亚洲一级毛片免费观看|