• hibernate


    transient(瞬时状态):刚new出的一个对象,还未保存到数据库

    persistent(持久化状态):对象受session托管

    datached(离线状态):数据库中有,但session中没有

    save: 将瞬时状态的对象,变成一个持久化状态。

    save和persist区别:

    使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save() 会立即将持久化对象对应的数据插入数据库;而 persist() 则保证当它在一个事物外部被调用时,并不立即转换成 insert 语句, 这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。

    session.beginTransaction();
    User user = new User();
    user.setPassword("aaa");
    //以上u就是Transient(瞬时状态),表示没有被session管理并且数据库中没有
    //执行save之后,被session所管理,此时就是Persistent状态
    session.save(user);
     //此时u是持久化状态,已经被session所管理,当在提交时,会把session中的对象和目前的对象进行比较
     //如果两个对象中的值不一致就会继续发出相应的sql语句
     user.setPassword("bbb");
    //此时会发出2条sql,一条用户做插入,一条用来做更新
    session.getTransaction().commit();    

    update: 将离线状态的对象,变成一个持久化状态(当这个对象已经处于持久化状态,无论后面的多次update或者save,如果没有改变对象,在提交事务的时候都不会发出sql)

    load,get:将离线状态对象,变成一个持久化状态,无论你是否执行update,在提交事务的时候,都会对比session中持久化的对象进行对比,如果不一样,则发出更新sql

    clear:将持久化状态,变成离线状态,对象不受session托管

    merge:当一个对象处于持久化状态,它的id是3。另个对象的id也是3,如果将第二个对象进行保存或更新操作,这是不被运行的,这样session中会存在两个引用。在这种场景会使用merge进行合并

    refresh:数据库同步到对象

  • 相关阅读:
    数据库的复制与附加,备份与还原
    数据库类型,约束,索引,视图
    数据索引及函数
    数据库及表的操作
    SQL数据库的查询方法
    数据库(增、删、改、查)
    数据库的基础知识
    C#阶段小结
    【WinForm】创建自定义控件(转)
    C# 自定义控件制作和使用实例(winform)(转)
  • 原文地址:https://www.cnblogs.com/dj3839/p/8616129.html
Copyright © 2020-2023  润新知