zoukankan      html  css  js  c++  java
  • 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:数据库同步到对象

  • 相关阅读:
    WPF and Silverlight 学习笔记:键盘输入、鼠标输入、焦点处理
    [转]Visual Studio .NET "目标平台" 说明
    WPF 使用HwndHost嵌入Win32后,无法接受Mouse_Move\Mouse_Leave消息
    c#有多少种可能导致写文件失败?
    优化性能:文本【msdn】
    解决popup不随着window一起移动的问题
    异常处理的资料
    利用bat编译WPF项目
    属性值继承
    WPF消息机制
  • 原文地址:https://www.cnblogs.com/dj3839/p/8616129.html
Copyright © 2011-2022 走看看