Hibernate学习3—映射对象标识符(OID)

一、Hibernate 用对象标识符(OID)来区分对象                                      

作如下代码的实验:

public class StudentTest {
    public static void main(String[] args) {
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();    
        session.beginTransaction();    
        
        Student s1 = (Student) session.get(Student.class, 1L);
        Student s2 = (Student) session.get(Student.class, 2L);
        Student s3 = (Student) session.get(Student.class, 1L);
        System.out.println(s1==s2);    //false
        System.out.println(s1==s3);    //true 说明s1 和 s3指向的是同一个对象
        
        session.getTransaction().commit();    
        session.close();    
    }
}
View Code

console:

s1和s3指向的是session中同一个OID为1的Student对象;

 

二、Hibernate 对象标识符生成策略                                          

生成主键的一个策略;
代理主键:stuId,纯编号,不具有任何业务意义;
比如你取的主键是学号,stuNo,也是唯一的,这是具有业务性的;
如果数据库建完之后,业务不会经常变动,比较稳的,比较死的,可以使用业务主键;
假如说业务经常变来变去的话,就使用代理主键,是不具有任何业务性的,仅仅是唯一的标识一条记录的;
 
我们增加Studen的代码都是:
public class StudentTest2 {
    public static void main(String[] args) {
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();    
        session.beginTransaction();    
        
        Student s = new Student();
        s.setName("张三");
        session.save(s);
        
        session.getTransaction().commit();    
        session.close();    
    }
}
View Code
 
1)increment

Student.hbm.xml:

<hibernate-mapping package="com.cy.model">
    <class name="Student" table="t_student">
        <id name="id" column="stuId">
            <generator class="increment"></generator>
        </id>
        <property name="name"></property>
        
    </class>
</hibernate-mapping>

运行测试代码StudentTest2,发现建的表:

保存发出的sql:

 

2)identity

建的表:

保存发出的sql:

 

3)sequcence

mysql是不支持sequcence的,但是Oracle和DB2支持;

 

4)hilo

 

5)native

mysql的native和identity是一样的;

创建表和发出的sql步骤都和identity一样;不在演示

 

posted on 2017-07-26 02:24  有点懒惰的大青年  阅读(632)  评论(0编辑  收藏  举报