主鍵生成器

 

assined 主鍵的值 程序指定java

uuid  hibernate幫你生成uuid,因此主鍵必須爲String程序員

Identity 數據庫表必須支持自動增加,新的主鍵的產生是由數據庫完成的,並非由hibernate或者程序員完成的數據庫

increment 遞增長1session

1         <id name="pid" column="pid" length="200" type="java.lang.Long">
2             <!-- 
3                 主鍵的產生器
4                   就該告訴hibernate容器用什麼樣的方式產生主鍵
5              -->
6             <generator class="increment"></generator>
7         </id>

 

 

  1 package cn.itcast.hibernate.sh.generator;
  2 
  3 import org.hibernate.Session;
  4 import org.hibernate.Transaction;
  5 import org.junit.Test;
  6 
  7 import cn.itcast.hibernate.sh.domain.Person;
  8 import cn.itcast.hibernate.sh.utils.HiberanteUtils;
  9 
 10 public class GeneratorTest extends HiberanteUtils{
 11     /**
 12      *     Hibernate: select max(pid) from Person
 13         Hibernate: insert into Person (pname, psex, pid) values (?, ?, ?)
 14         
 15         說明:
 16            一、主鍵的類型必須是數字
 17            二、主鍵的生成是由hibernate內部完成的,程序員不須要干預
 18            三、這種生成機制效率比較低
 19      */
 20     @Test
 21     public void testIncrement(){
 22         Session session = sessionFactory.openSession();
 23         Transaction transaction = session.beginTransaction();
 24         
 25         Person person = new Person();
 26         person.setPname("上海第一期班長");
 27         person.setPsex("女");
 28         
 29         /**
 30          * 參數必須持久化對象
 31          */
 32         session.save(person);
 33         
 34         transaction.commit();
 35         session.close();
 36     }
 37     
 38     /*
 39      * Hibernate: insert into Person (pname, psex) values (?, ?)
 40      * 說明
 41      *   一、新的主鍵的產生是由數據庫完成的,並非由hibernate或者程序員完成的
 42      *   二、該表必須支持自動增加機制
 43      *   三、效率比較高
 44      */
 45     @Test
 46     public void testIdentity(){
 47         Session session = sessionFactory.openSession();
 48         Transaction transaction = session.beginTransaction();
 49         
 50         Person person = new Person();
 51         person.setPname("上海第一期班長");
 52         person.setPsex("女");
 53         
 54         /**
 55          * 參數必須持久化對象
 56          */
 57         session.save(person);
 58         
 59         transaction.commit();
 60         session.close();
 61     }
 62     
 63     /**
 64      * 由程序設置主鍵
 65      */
 66     @Test
 67     public void testAssigned(){
 68         Session session = sessionFactory.openSession();
 69         Transaction transaction = session.beginTransaction();
 70         
 71         Person person = new Person();
 72         person.setPname("上海第一期班長");
 73         person.setPsex("女");
 74         
 75         /**
 76          * 參數必須持久化對象
 77          */
 78         session.save(person);
 79         
 80         transaction.commit();
 81         session.close();
 82     }
 83     
 84     /**
 85      * 一、UUID是由hibernate內部生成的
 86      * 二、主鍵的類型必須是字符串String類型
 87      */
 88     @Test
 89     public void testUUID(){
 90         Session session = sessionFactory.openSession();
 91         Transaction transaction = session.beginTransaction();
 92         
 93         Person person = new Person();
 94         person.setPname("上海第一期班長");
 95         person.setPsex("女");
 96         
 97         /**
 98          * 參數必須持久化對象
 99          */
100         session.save(person);
101         
102         transaction.commit();
103         session.close();
104     }
105     
106     
107     /**
108      * hibernate內部是根據主鍵生成器來生成主鍵的,在客戶端設置主鍵不必定起做用,在assigned的時候起做用
109      */
110     @Test
111     public void testIdentity_ID(){
112         Session session = sessionFactory.openSession();
113         Transaction transaction = session.beginTransaction();
114         Person person = new Person();
115         person.setPid(1L);
116         person.setPname("aa");
117         person.setPsex("aa");
118         session.save(person);
119         transaction.commit();
120         session.close();
121     }
122 }
相關文章
相關標籤/搜索