Hibernate知识点总结

本文深入探讨了ORM框架Hibernate的高级特性,包括ID生成策略、联合主键配置方法、SessionFactory连接数据库的方式、主键关联、级联操作、查询优化、并发控制及锁机制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()//得到每页的数据;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值