Hibernate Part1

原作者: 尚硅谷-佟刚


increment:在原来的基础上自增
identity:主键自增(适用MySQL)
hilo:采用高低算法来生成主键
native:依据底层数据库对自动生成标识符的支持能力(跨平台)


   News news1=(News)session.get(News.class, 1);
        news1.setTitle("GG");

dynamic-update:属性设置为false,true时SQL语句的变化

false:
Hibernate: 
    update
        NEWS 
    set
        TITLE=?,
        AUTHOR=?,
        DATE=?,
        CONTENT=?,
        IMAGE=? 
    where
        id=?
true:
Hibernate: 
    update
        NEWS 
    set
        TITLE=? 
    where
        id=?

update 方法:

 1.若更新一个持久化对象,不需要显示的调用update方法.
   因为在调用Transaction的commit()方法时,会先执行session的            flush方法

 2.更新游离对象时,需要现实的调用session的update方法.可以把一个游离对象变为一个持久化对象

  需要注意的:
   1.无论要更新的游离对象和数据表得记录是否一致,都会发送update语句
   如何让update方法不盲目的触发update语句呢?
   在.hbm.xml文件的class节点设置select-before-update=true(默认false)
   但通常不需要设置该属性.

  2.若数据表中没有对应的记录,但还调用了update方法,会抛出异常.


  3.当update()方法关联一个游离的对象时,如果session缓存中已经存在相同OID的持久化对象,会抛出异常
  因为在session缓存中不能有两个OID相同的对象.

get VS load:
1.执行get方法:会立即加载对象
执行load方法,若不使用该对象,则不会立即执行查询操作,而返回一 个代理对象 get是立即检索,load是延迟检索

2.load方法可能会抛出 LazyInitializationException异常
在需要初始化代理对象之前已经关闭了Session

3.若数据表中没有对应的记录,且Session也没有被关闭,同时需要使用对象时.get 返回null load 抛出异常.


refresh():会强制发送select语句,以使Session缓存中的对象的状态和数据表中的对应的记录保持一致!


flush:使数据表中的记录和Session缓存中的对象的状态保持一致,为了保持一致,则可能会发送对应的sql语句
1.在Transaction的commit()方法中,先调用session的flush方法,再提交事务
2.flush()方法可能会发送sql语句,但不会提交事务.
3.注意: 在未提交事务或显示调用session.flush()方法之前,也有可能会进 行flush操作.
1).执行HQL或QBC查询,会先进行flush()操作,已得到数据表中最新的记 录
2).若记录的ID是由底层数据库使用自增的方式生成的,则会在调用save方法后,就立即发送INSERT语句
因为save方法后,必须保证对象的ID是存在的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值