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

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

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

    Topquan's Blog

    分享價值----成就你我----我的博客----你的家

    Hibernate一對一數據關聯(二)

    唯一外鍵關聯
    一.單向一對一關聯
    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-08-05 00:42 topquan 閱讀(238) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 亚洲av午夜精品一区二区三区| 在线精品一卡乱码免费| 国产精品美女自在线观看免费| 亚洲黄色在线播放| 久久99国产综合精品免费| 亚洲成AV人片一区二区密柚| 久久精品免费观看| 久久精品国产亚洲AV高清热| 91福利免费视频| 亚洲人成网站日本片| 成年女人男人免费视频播放| 老子影院午夜伦不卡亚洲| 亚洲Av无码乱码在线znlu| 中文字幕高清免费不卡视频| 亚洲精品~无码抽插| 香港a毛片免费观看 | 亚洲欧洲国产精品香蕉网| 精品无码国产污污污免费网站国产| 亚洲国产另类久久久精品黑人| 国产激情免费视频在线观看| 久久亚洲日韩看片无码| 亚洲人成网站免费播放| 亚洲AV无码专区在线观看成人| 亚洲A丁香五香天堂网| 91成人免费观看在线观看| 久久精品国产亚洲AV无码麻豆| 成人超污免费网站在线看| 午夜在线免费视频 | 久久精品a一国产成人免费网站| 亚洲一区二区三区丝袜| 亚洲成a人无码av波多野按摩| 你懂的在线免费观看| 亚洲人成激情在线播放| 国产中文字幕免费观看| 免费观看91视频| 亚洲日韩国产AV无码无码精品 | 亚洲免费人成在线视频观看| 亚洲免费视频观看| 香蕉视频免费在线| 自怕偷自怕亚洲精品| 在线观看永久免费视频网站|