一、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();
}
}

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();
}
}
 
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一样;不在演示

Hibernate学习3—映射对象标识符(OID)的更多相关文章

  1. (三)映射对象标识符(OID)

    所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 用对象标识符(OID)来区分对象 例子: h ...

  2. 攻城狮在路上(壹) Hibernate(四)--- 对象标识符(OID)生成机制

    Hibernate使用对象标识符(OID)来建立内存中对象和数据库表中记录的对应关系,对象的OID和数据库的主键对应.为了保证OID的唯一性和不可变性,应该让Hibernate来为OID赋值.Hibe ...

  3. Hibernate学习笔记--映射配置文件详解

    参考资料: http://blog.163.com/hzd_love/blog/static/13199988120108265317988/ http://www.cnblogs.com/often ...

  4. Hibernate学习之映射关系

    一.Hibernate多对一关联映射:就是在“多”的一端加外键,指向“一”的一端. 比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系. 1.“多”端实体加入引用“一”端实体的变量及g ...

  5. Hibernate学习---关联关系映射

    关联关系是用到的最多的一种关系,非常重要,在内存中反映为实体关系,映射到DB中主键外键关系,实体间的关联,即对外键的维护,关联关系的发生,即对外键数据的改变. 在这里就不赘述什么是外键什么是主键了. ...

  6. [原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , joined-subclass,union-subclass )

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Hibernate学习笔记三:对象关系映射(一对一,一对多,多对一,多对多)

    如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...

  8. Hibernate学习(二)关系映射----基于外键的单向一对一

    事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...

  9. HIbernate学习笔记(七) hibernate中的集合映射和继承映射

    九.       集合映射 1. Set 2. List a)        @OrderBy 注意:List与Set注解是一样的,就是把Set更改为List就可以了 private List< ...

随机推荐

  1. Partition 1 does not start on physical sector boundary.分区信息不正常

    [root@v1 ~]# df -h Filesystem      Size  Used Avail Use% Mounted on /dev/sda2        20G  3.3G   16G ...

  2. Python中常用的内值方法

    1)min(2,4)            ## 求最小值        2)max(2,4)            ## 求最大值3)sum(range(1,100,2)) ## 求和4)枚举:返回 ...

  3. 记一次GreenPlum性能调优

    在部署了的GreenPlum集群中进行数据查询时,发现数据量一旦大了,查询一跑就中断,提示某个segment中断了连接. ERROR 58M01 "Error on receive from ...

  4. Buildroot构建指南——工具链

    Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软件.一般大家默认工具链等于gcc或者arm-linux-gcc,但是实际上,gcc只是工具链的编译器部分,不是全部,制作一个工 ...

  5. flowable EngineConfiguration的作用和继承关系(1)

    EngineConfiguration 是flowable引擎的核心部件. 在 flowable 中,实现引擎配置的顶层类是 AbstractEngineConfiguration 这是一个抽象类. ...

  6. Vim技能修炼教程(8) - 多窗口

    多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...

  7. 配置wampserver 虚拟主机

    1.修改http.conf 找到,#Include conf/extra/httpd-vhosts.conf,修改为(有的版本服务器,默认是开启的): 2.配置httpd-vhosts.conf文件, ...

  8. 对于KVO,你真的了解么?

      目录 关于面试 官方文档 核心代码 (Key-Value Observing) 进阶(手动创建KVO) 关于isa指针 参考文章链接 一.关于面试 面试官:谈一谈你对KVO的理解? A:添加响应者 ...

  9. java数组实现简单的DVD管理

    package com; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; pub ...

  10. NHibernate 01 [简述]

    本节内容: 系列简述 NHibernate是什么? NHibernate好处? 1.系列简述 最近在项目中使用到NHibernate,所以记录下自己学习的内容和步骤. 2.NHibernate是什么? ...