HelloWorld 善戰(zhàn)者,求之于勢,不責(zé)于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks

          CREATE TABLE t_users
          (
            id int4 NOT NULL DEFAULT nextval('t_user_id_seq'::text),
            age int4,
            name varchar(30),
            CONSTRAINT t_users_pkey PRIMARY KEY (id)
          )
          CREATE TABLE t_passports
          (
            id int4 NOT NULL DEFAULT nextval('t_user_id_seq'::text),
            serial varchar(30),
            expiry int4,
            CONSTRAINT t_passports_pkey PRIMARY KEY (id),
            CONSTRAINT t_passports_id_fkey FOREIGN KEY (id)
                REFERENCES t_users (id) MATCH SIMPLE
                ON UPDATE RESTRICT ON DELETE RESTRICT
          )
          第一部分 使用xml配置
          源代碼下載http://www.aygfsteel.com/Files/zhaochengming/one2one%20xmlcomfig%20hibernate.rar
          t_users和t_passports根據(jù)t_user.id一對一關(guān)聯(lián)
          TUsers.hbm.xml
          <hibernate-mapping>
              <class name="com.tables.one2one.TUsers" table="t_users" schema="public">
                  <id name="id" type="java.lang.Integer">
                      <column name="id" />
                      <generator class="sequence">
                      <param name="sequence">t_user_id_seq</param>
                      </generator>

                  </id>
                  <property name="age" type="java.lang.Integer">
                      <column name="age" />
                  </property>
                  <property name="name" type="java.lang.String">
                      <column name="name" length="30" />
                  </property>
                  <!-- 如果cascade=none的話,就不會級聯(lián)更新了,就是說只在t_users中插入值,在t_passports中不插入值 -->
                  <one-to-one name="passport" class="com.tables.one2one.TPassports"
                   cascade="all" outer-join="true">
                   
                  </one-to-one>
              </class>
          </hibernate-mapping>

          TPassports.hbm.xml
          <hibernate-mapping>
              <class name="com.tables.one2one.TPassports" table="t_passports" schema="public">
                  <id name="id" type="java.lang.Integer">
                      <column name="id" />
                      <!-- 這里一定要改成foreign -->
                      <generator class="foreign">
                      <param name="property">user</param>
                      </generator>

                  </id>
                  <one-to-one name="user" class="com.tables.one2one.TUsers" constrained="true"></one-to-one>
                  <property name="serial" type="java.lang.String">
                      <column name="serial" length="30" />
                  </property>
                  <property name="expiry" type="java.lang.Integer">
                      <column name="expiry" />
                  </property>
              </class>
          </hibernate-mapping>
          測試
          public class One2OneTest extends BaseHibernateDAO {
                public void test() {
                  TUsers user = new TUsers();
                  user.setAge(100);
                  user.setName("CEYLIN");
                  TPassports passport = new TPassports();
                  passport.setSerial("PCN1002211");
                  passport.setExpiry(20080806);
                  passport.setUser(user);
                  user.setPassport(passport);
                  Session session = this.getSession();
                  Transaction tx = session.beginTransaction();
                  session.save(user);
                  tx.commit();
              }
          }

          第二部分 使用注解,
          源代碼下載  http://www.aygfsteel.com/Files/zhaochengming/one2oneAnno1.rar

          package com;

          import javax.persistence.CascadeType;
          import javax.persistence.Column;
          import javax.persistence.Entity;
          import javax.persistence.GeneratedValue;
          import javax.persistence.Id;
          import javax.persistence.OneToOne;
          import javax.persistence.PrimaryKeyJoinColumn;
          import javax.persistence.SequenceGenerator;
          import javax.persistence.Table;

          @Entity
          @Table(name="t_users")
          public class TUser {
           @Id
           @Column(name = "user_id")
           @GeneratedValue(generator = "sequence")
           @SequenceGenerator(name = "sequence", sequenceName = "t_table_id_seq")
           private Integer id;
           
           @Column(name = "age")
           private Integer age;
           
           @Column(name= "name")
           private String name;
           
           @OneToOne(cascade = CascadeType.ALL)
           @PrimaryKeyJoinColumn
           private TPassport passport;

           public Integer getAge() {
            return age;
           }

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

           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;
           }

           public TPassport getPassport() {
            return passport;
           }

           public void setPassport(TPassport passport) {
            this.passport = passport;
           }
          }

          package com;

          import javax.persistence.Column;
          import javax.persistence.Entity;
          import javax.persistence.GeneratedValue;
          import javax.persistence.Id;
          import javax.persistence.OneToOne;
          import javax.persistence.Table;

          import org.hibernate.annotations.GenericGenerator;
          import org.hibernate.annotations.Parameter;

          @Entity
          @Table(name = "t_passports")
          public class TPassport {
           @Id
           @GeneratedValue(generator = "fk")
           @GenericGenerator(strategy = "foreign", name = "fk", parameters = @Parameter(name="property", value="user"))
           private Integer id;
           
           @Column(name = "serial")
           private String serial;
           
           @Column(name="expiry")
           private Integer expiry;
           
           @OneToOne(mappedBy="passport", optional = false)
           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;
           }
          }



          </script>

          posted on 2007-08-14 13:58 helloworld2008 閱讀(1646) 評論(1)  編輯  收藏 所屬分類: java - hibernatejava

          評論

          # re: (2) Hibernate 數(shù)據(jù)關(guān)聯(lián) one to one(共享主鍵) 2007-10-23 00:19 helloworld2008
          抄自己的書,讓別人去說吧  回復(fù)  更多評論
            

          主站蜘蛛池模板: 来安县| 静乐县| 中山市| 泗水县| 吴江市| 乳山市| 遂昌县| 曲阜市| 和龙市| 图木舒克市| 红河县| 商水县| 永修县| 水城县| 平阴县| 秀山| 南江县| 南皮县| 新蔡县| 定结县| 虹口区| 资源县| 玉屏| 兴和县| 新巴尔虎右旗| 益阳市| 马关县| 贺兰县| 绥中县| 泰顺县| 公主岭市| 郸城县| 通州市| 嘉荫县| 泰州市| 鄂尔多斯市| 思茅市| 邓州市| 海淀区| 砚山县| 云梦县|