1,ID生成策略 sql servicesql 使用identity orcale DB2 使用 squence
跨平台数据库 可以定义为 auto 会根据数据库的不同 使用identity 或者 队列 生成id 也可定义为 table类型
定义 Jpa 的 table类型 如: @Javax.persistence.TableGenerator (
name='以一个名字 在id那使用'
table=‘定义查询时的表名’
pkcolumnName = “key列的名字”
valuecolumnName=“value列的名字”
pkcolumnvalue=“key列的值”
allocationSize=1 每次加一
)
2,联合主键 需要把要联合的字段设置成一个新的类 有三种方法
1 @Embeddable @id 2,@EmbeddedID 3,@id 、@idClass
3,sessionFactory 连接数据库 打开session 有两种方法:
1,opensession : 每次都是一个新的session 2,getCurrentSession :从上下文找sesison 如果有用旧的如果没有 用新的
区别:opensession 需要close getCurrentSession 自动close;getCurrentSession :界定边界
4,hibernate 的上下文, 可能是线程中的 可能是在jta中的
线程是数据库的Connection中找链接 jta 是分布式的布局 从application 中找
5, 主键关联
在有主键的那一方面 @Embedded(嵌入的)
6, cascade 级联 有级联更新 级联删除 还有所有 使用规范是cascade={cascadeType.ALL }
管 增删改
fetch 管级联取得 FetchType.lazy or eager //懒汉 还是恶汉 在查询的时候
7, fetch 设置 在双向关联时 不能双边都设为eager 可以都设成lazy 也可以 在一的那一边设成eager 在多的那一边设成 lazy
8, order by(字段 排序)
9,并发,读数据的几种情况
脏读:读了别的还没有提交的数据
不可重复读:两次读的数据不一样 ,被事务影响
幻读:插入一个数据影响了读的结果问题
10,事务隔离机制(jdbc的接口):
Mysql:支持四种
orcale:支持2中
1(hibernate 默认代码),read-uncommited (读未提交)
允许读没有提交的事务(解决不了 脏读、不可重复读、幻读)
2,read-commited (读已提交)
允许读提交的事务:(解决 脏读、解决不了 不可重复读、幻读)
4,repeatable read (重复读)
可重复读 解决重复读的问题
8,serializable (串行化)
挨个执行 解决所有的 脏读 不可重复读、幻读)
11 ,hibernate 设置为2
hibernate.connection.isolation=2 //表示hibernate解决脏读 幻读 不可重复读 的级别为2 ------》read-commited
orcale设置的为:2 // 读提交过得事务
Mysql设置的为:4//repeatable read 可重复读
12,悲观锁 、乐观锁
考虑并发 设置read-commited
但是不可重复读
所以用悲观锁
13,hibernate load()
时候可以加锁
lockMode.None :不加锁
lockMode.read
lockMode.write
-------------hibernate 自动加以上的锁----------
lockMode.UPGrade// 会在语句上加 select * from table where id=1111 for update 这个事务不提交 不会让其他事务改他
14,hibernate 分页
Query query= session.createQuery("sql语句");
query.setFirstResult(1);//设置起始行
query.setMaxResults(10);//设置每页的条数
query.list()//得到每页的数据;