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

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

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

    隨筆-126  評論-247  文章-5  trackbacks-0


      博客搬家的時候順便把文章搬過來,如果看得不是很清楚的,可以前往原博客地址:
      -->URL:
    http://www.cnblogs.com/fancyzero/archive/2012/06/10/hibernate-one-to-one-annotation.html

    環境:

    Hibernate 3.3.1 
    Maven 3.0.4 
    MySQL 5.5.13 
    Myeclipse 8.6.1 

     

     建表語句:

    DROP TABLE IF EXISTS `t_card`;
    CREATE TABLE `t_card` (
      `cardId` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `cardNumber` char(18) NOT NULL,
      PRIMARY KEY (`cardId`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gb2312;
    
    INSERT INTO `t_card` VALUES ('1', '440911199008011122');
    DROP TABLE IF EXISTS `t_person`;
    CREATE TABLE `t_person` (
      `personId` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `personName` varchar(15) NOT NULL,
      `cid` int(10) unsigned NOT NULL,
      PRIMARY KEY (`personId`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gb2312;
    
    INSERT INTO `t_person` VALUES ('1', 'fancy', '1');

     

    Person.java

    package com.fancy.po;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    /**
     * -----------------------------------------
     * @文件: Person.java
     * @作者: fancy
     * @郵箱: fancyzero@yeah.net
     * @時間: 2012-6-10
     * @描述: 實體類
     * -----------------------------------------
     */
    /**
     * @Entity 聲明一個類為實體Bean
     * @Table(name = "xx")指定實體類映射的表,如果表名和實體類名一致,可以不指定
     */
    @Entity
    @Table(name = "t_person")
    public class Person {
    
        private Integer personId;
        private String  personName;
        private Card    card;
        /**
         * @Id 映射主鍵屬性,這里采用uuid的主鍵生成策略
          * @GeneratedValue —— 注解聲明了主鍵的生成策略。該注解有如下屬性
          * strategy 指定生成的策略,默認是GenerationType. AUTO
         * GenerationType.AUTO 主鍵由程序控制
          * GenerationType.TABLE 使用一個特定的數據庫表格來保存主鍵
          * GenerationType.IDENTITY 主鍵由數據庫自動生成,主要是自動增長類型
          * GenerationType.SEQUENCE 根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列
          * generator 指定生成主鍵使用的生成器
          */
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Integer getPersonId() {
            return personId;
        }
        /**
         * @OneToOne:一對一關聯
          * cascade:級聯,它可以有有五個值可選,分別是:
          * CascadeType.PERSIST:級聯新建
          * CascadeType.REMOVE : 級聯刪除
          * CascadeType.REFRESH:級聯刷新
          * CascadeType.MERGE  : 級聯更新
          * CascadeType.ALL    : 以上全部四項
          * @JoinColumn:主表外鍵字段
          * cid:Person所映射的表中的一個字段
          */
        @OneToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "cid")
        public Card getCard() {
            return card;
        }
        public String getPersonName() {
            return personName;
        }
        public void setPersonId(Integer personId) {
            this.personId = personId;
        }
        public void setPersonName(String personName) {
            this.personName = personName;
        }
        public void setCard(Card card) {
            this.card = card;
        }
    }

     

    Card.java

    package com.fancy.po;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    /**
     * -----------------------------------------
     * @文件: Card.java
     * @作者: fancy
     * @郵箱: fancyzero@yeah.net
     * @時間: 2012-6-10
     * @描述: 實體類
     * -----------------------------------------
     */
    @Entity
    @Table(name = "t_card")
    public class Card {
    
        private Integer cardId;
        private String  cardNumber;
        private Person  person;
        
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Integer getCardId() {
            return cardId;
        }
        /**
         * @OneToOne:一對一關聯
          * mappedBy = "card":意思是說這里的一對一配置參考了card
         * card又是什么呢?card是Person類中的getCard(),注意不是Person類中的
          * card屬性,Person類中的OneToOne配置就是在getCard()方法上面配的.
         * 如果Person類中的getCard()方法改成getIdCard(),其他不變的話,
         * 這里就要寫成:mappedBy = "idCard"
         */
        @OneToOne(mappedBy = "card")
        public Person getPerson() {
            return person;
        }
        public String getCardNumber() {
            return cardNumber;
        }
        public void setCardId(Integer cardId) {
            this.cardId = cardId;
        }
        public void setCardNumber(String cardNumber) {
            this.cardNumber = cardNumber;
        }
        public void setPerson(Person person) {
            this.person = person;
        }
    }

     

     pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.fancy</groupId>
      <artifactId>hibernate-annotation-on-to-one-example</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
      <name>hibernate-annotation-on-to-one-example</name>
      <url>http://maven.apache.org</url>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      
      <dependencies>
        <!-- hibernate jar -->
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-entitymanager</artifactId>
          <version>3.3.1.ga</version>
        </dependency>
        <!-- hibernate annotation jar -->
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-annotations</artifactId>
          <version>3.3.1.GA</version>
        </dependency>
        <!-- mysql -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.17</version>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      
    </project>

     

    Test.java

    package com.fancy.test;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.cfg.Configuration;
    import com.fancy.po.Card;
    import com.fancy.po.Person;
    /**
     * -----------------------------------------
     * @文件: Test.java
     * @作者: fancy
     * @郵箱: fancyzero@yeah.net
     * @時間: 2012-6-10
     * @描述: 測試類
     * -----------------------------------------
     */
    public class Test {
    
        public static void main(String[] args) {
            
            //讀取hibernate配置,默認讀取classpath下的hibernate.cfg.xml
            Configuration conf = new AnnotationConfiguration();    
            //構建session工廠
             SessionFactory sessionFactory = conf.configure().buildSessionFactory();
            //打開session
            Session session = sessionFactory.openSession();
            //開始事務
             session.beginTransaction();
            // * * * * * * * * * * * * * * * * * * * * * * * * * * * *
            //test1(session);    //測試 1
            //test2(session);    //測試 2
            test3(session);      //測試 3
            // * * * * * * * * * * * * * * * * * * * * * * * * * * * *
            //提交事務
             session.getTransaction().commit();
            //關閉session工廠
             sessionFactory.close();
           //關閉session
           session.close();
        }
        /**
         * 數據庫初始值:
          * personName:fancy
         * cardNumber:440911199008011122
         */
        //測試方法1
        public static void test1(Session session){
            Person person = (Person)session.get(Person.class, 1); //發出Person和Card的select語句
             Card card = person.getCard();
            System.out.println(person.getPersonName());
            System.out.println(card.getCardNumber());
            person.setPersonName("fancy");            //與初始值一致
             card.setCardNumber("440911199008011122");//與初始值一致
             session.save(person);    //不發出sql語句
           //session.save(card);     //不發出sql語句
        }
        //測試方法2
        public static void test2(Session session){
            Person person = (Person)session.get(Person.class, 1); //發出Person和Card的select語句
             Card card = person.getCard();
            System.out.println(person.getPersonName());
            System.out.println(card.getCardNumber());
            person.setPersonName("fancyzero");        //與初始值不一致
             card.setCardNumber("440911199008011122");//與初始值一致
             session.save(person);    //發出Person的update語句,數據庫中personName被修改,不發出Card的update語句
           //session.save(card);     //發出Person的update語句,數據庫中personName被修改,不發出Card的update語句
        }
        //測試方法3
        public static void test3(Session session){
            Person person = (Person)session.get(Person.class, 1); //發出Person和Card的select語句
             Card card = person.getCard();
            System.out.println(person.getPersonName());
            System.out.println(card.getCardNumber());
            person.setPersonName("fancy");           //與初始值不一致
             card.setCardNumber("440911199008080808");//與初始值不一致
             session.save(person);    //同時發出Person和Card的update語句,數據庫中的數據相應被修改
           //session.save(card);     //同時發出Person和Card的update語句,數據庫中的數據相應被修改
        }
    }

     



      
    posted on 2012-06-10 14:34 fancydeepin 閱讀(914) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲一区二区三区夜色| 免费人成在线观看视频播放| 久久亚洲中文字幕精品一区| 美女裸体无遮挡免费视频网站| 国产视频精品免费| 老司机午夜免费视频| 亚洲国产婷婷综合在线精品| www永久免费视频| 国产成人精品日本亚洲专区61| 久久er国产精品免费观看8| 亚洲一区二区三区自拍公司| 两个人日本免费完整版在线观看1| 亚洲区小说区激情区图片区| 久久免费观看国产精品88av| 亚洲视频在线观看地址| 无码av免费毛片一区二区 | 国产亚洲成人在线播放va| fc2免费人成为视频| 亚洲Av综合色区无码专区桃色| 亚洲一区二区在线免费观看| 亚洲一区二区三区国产精品无码| 三年片在线观看免费大全| 噜噜综合亚洲AV中文无码| 亚洲综合精品香蕉久久网| 精品熟女少妇av免费久久| 成在线人直播免费视频| 亚洲午夜激情视频| 99re这里有免费视频精品| 中日韩亚洲人成无码网站| 久久大香伊焦在人线免费| 亚洲国产成人久久99精品| 95免费观看体验区视频| 亚洲欧美成人av在线观看| 亚洲中文字幕成人在线| 成人免费激情视频| 特a级免费高清黄色片| 亚洲的天堂av无码| 亚洲成a人片在线播放| 114级毛片免费观看| 男性gay黄免费网站| 亚洲国产高清在线|