hibernate主鍵的生成器

10-主鍵的生成器

hibernate是根據映射文件的主鍵生成器生成主鍵噠,自己設置的主鍵不起作用

<!-- 主鍵的產生器就該告訴hibernate容器用什麼樣的方式產生主鍵-->

<generator class="increment"></generator>

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
 
public class GeneratorTest extends ConfigUtil{
    /**
     * Hibernate: select max(pid) from Person
    Hibernate: insert into Person (pname, psex, pid) values (?, ?, ?)
    
    說明:
       1、主鍵的類型必須是數字
       2、主鍵的生成是由hibernate內部完成的,程序員不需要干預
       3、這種生成機制效率比較低
     */
    @Test
    public void testIncrement(){
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        
        Person person = new Person();
        person.setPname("班長3");
        person.setPsex("女");
        
        /**save的參數必須持久化對象*/
        session.save(person);
        
        transaction.commit();
        session.close();
    }
    
    /*
     * Hibernate: insert into Person (pname, psex) values (?, ?)
     * 說明
     *   1、新的主鍵的產生是由數據庫完成的,並不是由hibernate或者程序員完成的
     *   2、該表必須支持自動增長機制
     *   3、效率比較高
     */
    @Test
    public void testIdentity(){
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        
        Person person = new Person();
        person.setPname("班長");
        person.setPsex("女");
        
        /**
         * 參數必須持久化對象
         */
        session.save(person);
        
        transaction.commit();
        session.close();
    }
    
    /**
     * 由程序員手寫設置主鍵
     */
    @Test
    public void testAssigned(){
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        
        Person person = new Person();
                      person.setPid(4L);
        person.setPname("班長");
        person.setPsex("女");
        
        session.save(person);
        
        transaction.commit();
        session.close();
    }
    
    /**
     * 1、UUID是由hibernate內部生成的,主鍵的類型是String
     * 2、主鍵的類型必須是字符串
     */
    @Test
    public void testUUID(){
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        
        Person person = new Person();
        person.setPname("班長");
        person.setPsex("女");
        
        session.save(person);
        
        transaction.commit();
        session.close();
    }
    
    
    /**
     * hibernate內部是根據主鍵生成器來生成主鍵的,在客戶端設置主鍵不一定起作用,在assigned的時候起作用
     */
    @Test
    public void testIdentity_ID(){
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        Person person = new Person();
        person.setPid(1L);
        person.setPname("aa");
        person.setPsex("aa");
        session.save(person);
        transaction.commit();
        session.close();
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章