Hibernate 用对象标识符(OID)来区分实例分析
package com.java1234.service;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.java1234.model.Student;
import com.java1234.util.HibernateUtil;
public class StudentTest {
public static void main(String[] args) {
SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
Student s1=(Student)session.get(Student.class, Long.valueOf(1));
Student s2=(Student)session.get(Student.class, Long.valueOf(2));
Student s3=(Student)session.get(Student.class, Long.valueOf(1));
System.out.println(s1==s2);
System.out.println(s1==s3);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
}
}
s1==s2 输出为false
s1==s3 输出为true
Hibernate 对象标识符生成策略
主键的分类 业务主键 VS 代理主键 代理主键是不具有业务性的;代理主键比如学生的主键列值为1,2,3,而业务主键就是学号
201511105027这种
1,increment 由 Hibernate 自动以递增的方式生成标识符,适用代理主键;(比如插入的时候插入语句中会出现主键这个属性列)
2,identity 由底层数据库生成标识符;适用代理主键;(比如插入的时候插入语句中不会出现主键这个属性列) 底层数据库中在主键上面勾选了自动递增
3,sequcence 由 Hibernate 根据底层数据库的序列来生成标识符;适用代理主键;
4,hilo Hibernate 根据 high/low 算法来生成标识符。适用代理主键
5,native 根据底层数据库对自动生成标识符的支持能力, 来选择 identity,sequence 或 hilo;适用代理主键;(比如插入的时候插入语句中不会出现主键这个属性列)
举例说明:
identity 插入学生的sql语句:
insert into t_student(name) values("张三");