摘要:
Identity字段与sequence的最大不同在于:identity只能在一个表中使用,多个表不可以共享identity;而sequence可以通过命名方式在同一个数据库内部的多个表中共享序列号发生器----------------------------------------------------------------identity 和sequence的区别:----------------------------------------------------------------db2,sql server 都不支持一个表中包含两个以及两个以上的identity字段oracl 阅读全文
posted @ 2013-05-08 23:04
jack_ou
阅读(3569)
评论(0)
推荐(0)
摘要:
identity:由底层数据库生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,前提条件是低层数据库支持自动增长字段类型increment:由hibernate管理主键,自动以递增的方式生成标识符,每次增量为1。其在每次插入前取得一个当前最大的id+1作为主键,该主键必须为Integer类型附:“assigned” 主键由外部程序负责生成,在 save() 之前指定一个。 “hilo” 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源“seqhilo” 与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Seque 阅读全文
posted @ 2013-05-08 23:00
jack_ou
阅读(419)
评论(0)
推荐(0)
摘要:
在了解Hibernate的LockMode之前,我们先讲一下LockMode是什么东西?其实LockMode只是在使用Hibernate 中 的session.load()加载数据时指定的模式,也叫悲观锁(模式),然而,悲观锁是为了弥补read-committed 机制的不足,从而解决non-repeatable (不可重复读)和 phantom-read (幻读)问题,而non-repeatable 和 phantom-read 这两个问题也只是事务并发是产生的两种问题... 看了我写的这一段后,我相信很多读者会有点懵,这就对了,看完下面的文章,再后过头来读这一段,就全都明白了。我们知道,事 阅读全文
posted @ 2013-05-08 08:59
jack_ou
阅读(996)
评论(0)
推荐(0)
摘要:
session.evict(obj),会把指定的缓冲对象进行清除session.clear(),把缓冲区内的全部对象清除,但不包括操作中的对象所以,hibernate执行的顺序如下,(1)生成一个事务的对象,并标记当前的Session处于事务状态(注:此时并未启动数据库级事务)。 (2)应用使用s.save保存对象,这个时候Session将这个对象放入entityEntries,用来标记对象已经和当前的会话建立了关联,由于应用对对象做了保存的操作,Session还要在insertions中登记应用的这个插入行为(行为包括:对象引用、对象id、Session、持久化处理类)。(3)s.evict 阅读全文
posted @ 2013-05-08 08:51
jack_ou
阅读(442)
评论(0)
推荐(0)
摘要:
find,iterator(1)iterator首先会获取符合条件的记录的id,再跟据id在本地缓存中查找数据,查找不到的再在数据库中查找,结果再存在缓存中。N+1条SQL。(2)find跟据生成的sql语句,直接访问数据库,查到的数据存在缓存中,一条sql。如果找不到符合条件的纪录,get()方法将返回null.如果找不到符合条件的纪录,find()方法将返回null.如果找不到符合条件的纪录,load()将会报出ObjectNotFoundEcception.get()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询 .find()方法会忽略二级缓存,若内部缓存没有查询到会到数据 阅读全文
posted @ 2013-05-08 08:43
jack_ou
阅读(423)
评论(0)
推荐(0)
摘要:
hibernate的保存 hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别: 一、预备知识: 在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient、persistent、detached 下边是常见的翻译办法: transient:瞬态或者自由态 persistent:持久化状态 detached:脱管状态或者游离态游离状态的实例可以通过调用save()、persist()或者saveOrUpdate()方法进行持久化。 持久化实例可以通过调用 delete()变成脱管状态。通过get()或load()方法得到的实例都 阅读全文
posted @ 2013-05-08 08:39
jack_ou
阅读(361)
评论(1)
推荐(1)
摘要:
persist和save区别 这个是最迷离的一对,表面上看起来使用哪个都行,在hibernate reference文档中也没有明确的区分他们. 这里给出一个明确的区分。(可以跟进src看一下,虽然实现步骤类似,但是还是有细微的差别) 主要内容区别: 1,persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。---不直接进数据库,多用于批量处理等2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert,---- 阅读全文
posted @ 2013-05-08 08:38
jack_ou
阅读(325)
评论(0)
推荐(0)

浙公网安备 33010602011771号