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

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

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

    午后星期午

    hibernate annotation 雙向 one-to-one 注解

    環(huán)境:
    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 使用一個特定的數(shù)據(jù)庫表格來保存主鍵
          * GenerationType.IDENTITY 主鍵由數(shù)據(jù)庫自動生成,主要是自動增長類型
          * GenerationType.SEQUENCE 根據(jù)底層數(shù)據(jù)庫的序列來生成主鍵,條件是數(shù)據(jù)庫支持序列
          * generator 指定生成主鍵使用的生成器
          */
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Integer getPersonId() {
            return personId;
        }
        /**
         * @OneToOne:一對一關(guān)聯(lián)
          * cascade:級聯(lián),它可以有有五個值可選,分別是:
          * CascadeType.PERSIST:級聯(lián)新建
          * CascadeType.REMOVE : 級聯(lián)刪除
          * CascadeType.REFRESH:級聯(lián)刷新
          * CascadeType.MERGE  : 級聯(lián)更新
          * 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:一對一關(guān)聯(lián)
          * 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();    
            //構(gòu)建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();
            //關(guān)閉session工廠
             sessionFactory.close();
           //關(guān)閉session
           session.close();
        }
        /**
         * 數(shù)據(jù)庫初始值:
          * personName:fancy
         * cardNumber:440911199008011122
         */
        //測試方法1
        public static void test1(Session session){
            Person person = (Person)session.get(Person.class, 1); //發(fā)出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);    //不發(fā)出sql語句
           //session.save(card);     //不發(fā)出sql語句
        }
        //測試方法2
        public static void test2(Session session){
            Person person = (Person)session.get(Person.class, 1); //發(fā)出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);    //發(fā)出Person的update語句,數(shù)據(jù)庫中personName被修改,不發(fā)出Card的update語句
           //session.save(card);     //發(fā)出Person的update語句,數(shù)據(jù)庫中personName被修改,不發(fā)出Card的update語句
        }
        //測試方法3
        public static void test3(Session session){
            Person person = (Person)session.get(Person.class, 1); //發(fā)出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);    //同時發(fā)出Person和Card的update語句,數(shù)據(jù)庫中的數(shù)據(jù)相應被修改
           //session.save(card);     //同時發(fā)出Person和Card的update語句,數(shù)據(jù)庫中的數(shù)據(jù)相應被修改
        }
    }

     




       [轉(zhuǎn)載出處:http://www.tkk7.com/fancydeepin ]

    posted on 2013-12-31 13:33 午后星期午 閱讀(84) 評論(0)  編輯  收藏 所屬分類: JavaEE

    主站蜘蛛池模板: 国产成人免费高清在线观看 | 亚洲国产精品一区二区久久| 免费国产污网站在线观看不要卡| 成人免费视频一区| 亚洲精品一二三区| 午夜高清免费在线观看| 亚洲一区二区三区免费观看| 在线观看视频免费完整版| 亚洲一卡二卡三卡四卡无卡麻豆| av大片在线无码免费| 亚洲免费福利在线视频| 日本一区免费电影| 一级做a爰黑人又硬又粗免费看51社区国产精品视| 成人永久免费高清| 人碰人碰人成人免费视频| 亚洲va久久久噜噜噜久久狠狠| 免费一级毛片无毒不卡| 亚洲视频一区在线播放| 毛片基地免费视频a| 猫咪www免费人成网站| 亚洲av伊人久久综合密臀性色| 最刺激黄a大片免费网站| 亚洲色偷偷综合亚洲av78| 亚洲精品成人区在线观看| 中文成人久久久久影院免费观看| 亚洲一区二区成人| 午夜视频免费观看| 久久国产精品免费| 亚洲国产精品网站久久| 永久黄网站色视频免费直播| xxxxxx日本处大片免费看| 亚洲精品无码专区久久久 | 亚洲乱人伦中文字幕无码| www亚洲一级视频com| 久久九九AV免费精品| 亚洲人成欧美中文字幕| 国产精品亚洲美女久久久| 永久免费视频网站在线观看| 色费女人18女人毛片免费视频| 亚洲色图在线播放| 四虎影在线永久免费观看|