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


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

          環(huán)境:

          Hibernate 3.3.1 
          Maven 3.0.4 
          MySQL 5.5.13 
          Myeclipse 8.6.1 

          建表語句:

          DROP TABLE IF EXISTS `t_company`;
          CREATE TABLE `t_company` (
            `companyId` int(10) unsigned NOT NULL AUTO_INCREMENT,
            `companyName` varchar(30) NOT NULL,
            PRIMARY KEY (`companyId`)
          ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gb2312;
          
          INSERT INTO `t_company` VALUES ('1', 'Sun');
          INSERT INTO `t_company` VALUES ('2', 'Apache');
          DROP TABLE IF EXISTS `t_employee`;
          CREATE TABLE `t_employee` (
            `employeeId` int(10) unsigned NOT NULL AUTO_INCREMENT,
            `employeeName` varchar(15) NOT NULL,
            `cid` int(10) unsigned NOT NULL,
            PRIMARY KEY (`employeeId`)
          ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=gb2312;
          
          INSERT INTO `t_employee` VALUES ('1', 'Tom', '1');
          INSERT INTO `t_employee` VALUES ('2', 'Summ', '1');
          INSERT INTO `t_employee` VALUES ('3', 'Cat', '2');
          INSERT INTO `t_employee` VALUES ('4', 'Vinylon', '1');
          INSERT INTO `t_employee` VALUES ('5', 'Dog', '2');

          目錄結構:

          Employee.java

          package com.fancy.po;
          
          import javax.persistence.CascadeType;
          import javax.persistence.Entity;
          import javax.persistence.FetchType;
          import javax.persistence.GeneratedValue;
          import javax.persistence.GenerationType;
          import javax.persistence.Id;
          import javax.persistence.JoinColumn;
          import javax.persistence.ManyToOne;
          import javax.persistence.Table;
          /**
           * -----------------------------------------
           * @文件: Employee.java
           * @作者: fancy
           * @郵箱: fancyzero@yeah.net
           * @時間: 2012-6-10
           * @描述: 實體類
           * -----------------------------------------
           */
          /**
           * 下面只說@ManyToOne,如需了解其他注解,
           * 可以參考上一篇:http://www.cnblogs.com/fancyzero/archive/2012/06/10/hibernate-one-to-one-annotation.html
           */
          @Entity
          @Table(name = "t_employee")
          public class Employee {
          
              private Integer employeeId;
              private String  employeeName;
              private Company company;
              
              @Id
              @GeneratedValue(strategy = GenerationType.AUTO)
              public Integer getEmployeeId() {
                  return employeeId;
              }
              /**
               * @ManyToOne:多對一,cascade:級聯(lián),請參考上一篇
                * fetch = FetchType.LAZY,延遲加載策略,如果不想延遲加載可以用FetchType.EAGER
               */
              @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH},fetch = FetchType.LAZY)
              @JoinColumn(name = "cid")
              public Company getCompany() {
                  return company;
              }
              public String getEmployeeName() {
                  return employeeName;
              }
              public void setEmployeeId(Integer employeeId) {
                  this.employeeId = employeeId;
              }
              public void setEmployeeName(String employeeName) {
                  this.employeeName = employeeName;
              }
              public void setCompany(Company company) {
                  this.company = company;
              }
          }

           

          Company.java

          package com.fancy.po;
          
          import java.util.Set;
          import javax.persistence.Entity;
          import javax.persistence.GeneratedValue;
          import javax.persistence.GenerationType;
          import javax.persistence.Id;
          import javax.persistence.OneToMany;
          import javax.persistence.Table;
          /**
           * -----------------------------------------
           * @文件: Company.java
           * @作者: fancy
           * @郵箱: fancyzero@yeah.net
           * @時間: 2012-6-10
           * @描述: 實體類
           * -----------------------------------------
           */
          /**
           * 下面只說@OneToMany,如需了解其他注解,
           * 可以參考上一篇:http://www.cnblogs.com/fancyzero/archive/2012/06/10/hibernate-one-to-one-annotation.html
           */
          @Entity
          @Table(name = "t_company")
          public class Company {
          
              private Integer companyId;
              private String  companyName;
              private Set<Employee> employees;
              
              @Id
              @GeneratedValue(strategy = GenerationType.AUTO)
              public Integer getCompanyId() {
                  return companyId;
              }
              /**
               * @OneToMany 與 OneToOne相似的也用mappedBy,參考了Employee
               * 可以參考上一篇
               */
              @OneToMany(mappedBy = "company")
              public Set<Employee> getEmployees() {
                  return employees;
              }
              public String getCompanyName() {
                  return companyName;
              }
              public void setCompanyId(Integer companyId) {
                  this.companyId = companyId;
              }
              public void setCompanyName(String companyName) {
                  this.companyName = companyName;
              }
              public void setEmployees(Set<Employee> employees) {
                  this.employees = employees;
              }
          }

           

          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-many-to-one-example</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>jar</packaging>
            <name>hibernate-annotation-many-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 java.util.Iterator;
          import java.util.Set;
          import org.hibernate.Session;
          import org.hibernate.SessionFactory;
          import org.hibernate.cfg.AnnotationConfiguration;
          import org.hibernate.cfg.Configuration;
          import com.fancy.po.Company;
          import com.fancy.po.Employee;
          /**
           * -----------------------------------------
           * @文件: 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();
              }
              public static void test1(Session session){
                  Company company = (Company)session.get(Company.class, 1); //發(fā)出Company的select語句
                   Set<Employee> employee = company.getEmployees();         //不發(fā)出Employee的select語句
                   System.out.println("Company :" + company.getCompanyName());
                  System.out.println("CountSum:" + employee.size()); //Employee初次被使用,發(fā)出select語句
                   Iterator<Employee> it = employee.iterator(); //Employee不再發(fā)出select語句
                   while(it.hasNext()){
                    System.out.println("EmployeeName:" + it.next().getEmployeeName());
                  }
              }
              public static void test2(Session session){
                 Company company = (Company)session.get(Company.class, 2);//發(fā)出Company的select語句
                  Set<Employee> employee = company.getEmployees();        //不發(fā)出Employee的select語句
                  Iterator<Employee> it = employee.iterator(); //發(fā)出Employee的select語句
                  Employee e = null;
                 Boolean first = false;
                 while(it.hasNext()){
                    e = it.next();
                    if(!first){
                        System.out.println("EmployeeId:[" + e.getEmployeeId() + "] information will be change");
                        e.setEmployeeName("fancy"); //更改雇員名字
                      //  session.save(e);  //發(fā)出Employee的update語句,不發(fā)出Company的update語句
                          session.save(company);    //發(fā)出Employee的update語句,不發(fā)出Company的update語句
                          first = true;
                      }
                      System.out.println("EmployeeName:" + e.getEmployeeName());
                  }
              }
              public static void test3(Session session){
                  Employee employee = (Employee)session.get(Employee.class, 1);//發(fā)出Employee的select語句
                   Company  company  = (Company)session.get(Company.class, 1);//發(fā)出Company的select語句
                   company.setCompanyName("Oracle"); //更改公司名字
              //  session.save(company);//發(fā)出Company的update語句,不發(fā)出Employee的update語句
                   session.save(employee);//發(fā)出Company的update語句,不發(fā)出Employee的update語句
              }
          }

           



            
          posted on 2012-06-10 18:57 fancydeepin 閱讀(19568) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 循化| 汉寿县| 金堂县| 孟村| 萨嘎县| 利川市| 团风县| 阿克苏市| 叙永县| 津南区| 桦甸市| 融水| 阿瓦提县| 吉隆县| 宝兴县| 汕尾市| 宜阳县| 辽宁省| 建昌县| 娱乐| 东兴市| 新邵县| 武强县| 永平县| 大悟县| 红桥区| 商水县| 永吉县| 平江县| 英吉沙县| 永新县| 桑日县| 沽源县| 浦县| 赤水市| 富宁县| 定边县| 汽车| 玛纳斯县| 葵青区| 伊吾县|