• Hibernate总结3


    一,对象的四种状态

    临时状态:

    与数据库没有对应,跟Session没有关联。
    一般是新new出的对象。

    持久化状态:

    对象在Session的管理之中,最终会有对应的数据库记录。save saveorupdate

    特点:

    1,有OID

    2,对对象的修改会同步到数据库。

    游离状态:

    数据库中有对应记录,但对象不在Session管理之中。 clser()清除所有对象,close()关 掉session,evict(object)清除一个对象

    修改此状态对象时数据库不会有变化。

    删除状态:

    执行了delete()后的对象。

    二,Session方法总结

    1、操作实体对象的

    save()         这个是在commit前执行的,就这一个,其他的都是在commit后执行的

    update()         在commit后执行,其实commit中有一个flush方法来执行

    saveOrUpdate()   同上

    delete()        同上


    2、操作缓存的

    clear()

    evict() 剔除一个对象

    flush() 马上执行所有的sql语句,默认的是commit提交

    3、查询实体对象的

    get()  马上执行,在commit之前,获取返回的是原始对象

    load()  懒加载,不会马上执行sql语句,而是在第一次使用非ID,或者Class是执行sql,返回的是不是真正的对象,是代理对象,而这个代理对象是真正对象的子类

    createQuery()

    createCriteria()

    三 get()和load的区别

    通过上面我们可以得出,get和load的区别是不是懒加载,当对象不存在的时候,会出现错误,而get方法得到的是一个实际的类,因为load加载的代理对象是真正对象的子类,所以,如果可以通过两种方法来取消懒加载

    1,将类设置为final类,这样的话,就不会在生成类的子类,因为无法加载

    2,在类的xxx.hnm.xml里,在类的名称下设置lazy="false";

    加载方式 返回值 如果数据不存在
    ---------------------------------------------------------
    get 立即加载 真实对象或null 返回null
    load 延迟加载 代理对象 抛异常

  • 相关阅读:
    csrf攻击实例
    《四 数据库连接池源码》手写数据库连接池
    《四 spring源码》手写springmvc
    spring和springmvc是单例还是多例
    redis集群设置密码
    mongodb3.6集群搭建:分片集群认证
    mongodb3.6集群搭建:分片+副本集
    Mongo 3.6.1版本Sharding集群配置
    windows计划任务
    Redis slowlog慢查询
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/5676888.html
Copyright © 2020-2023  润新知