hibernate session常用方法

 一.获取对象
 load()和get()方法的不同
1.获取失败处理方式不同

session.get()无法在数据库中找到记录的话,get()方法将会返回null,而load()方法将会抛出找不到对象的异常。

2.返回类型不同

get()返回的是一个对象的实例,

性能上更加优异

而load()返回的是该对象的代理,这个代理是只含有对象标识符的空对象,只用真正用到该对象的内容时,hibernate才会想数据库发送select请求,获取真实的对象。

注意 session对象关闭时 在试图获取真实对象时,会抛出异常。。。。。

     二.保存对象
     1.persist方法无返回值,而save()方法将会返回对象的标识符
     2.persist只能保存暂态对象和持久化对面,如果保存了游离态对象和移除态对象将会抛出异常
     
     三.更新对象
     获取了持久化对象或者游离态对象时,我们往往可以用update()方法修改该对象的数据库记录
     但是我们也可以不显示调用update()方法,hibernate提供了智能脏数据检测可以进行脏数据检测,
     注意保存了更新游离态对象后,游离态对象变成持久态对象
     四.合并对象
       merge(class)
       合并对象主要是把游离态对象合并到工作单元当中,然后把游离态对的内容更新到数据库对应的表格中。
       合并的前提是首先在上下文中寻找标识符相同的对象,如果没有找到,则会向数据库发出请求,使用游离态对象的标识符载入一个新的持久化对象
       到上下文中,然后把游离态对象的属性赋值过去。
       如果在上下文中找到标识符相同的持久化对象,则会合并游离态的内容到该持久化对象中
       五.删除对象
     delete()
     删除暂态对象不做操作,删除持久化对象和游离态对象将会删除数据库记录,删除移除态对象将会抛出异常
     六.处理游离态对象
     1.生成游离态对象:
     session.close()隐式生游离态对象
     session.evict(Object)显示的把某个实体对象清除持久化上下文,该对象成为游离态对象
     session.clear()清除上下文所有的持久化对象
    2.利用游离态对象复制对象
    Session接口中提供了replicate方法来完成这项工作
    
    Session session1=sf.openSession();
    Transaction transaction1=session.beginTransaction();
    Book book1=session.get(Book.class,1);
    transaction1.commit();
    session1.close();
    此时得到了游离态对象book1
    
    Session session2=sf.openSession();
    Transaction transaction2=session.beginTransaction();
    session.replicate(book,ReplicateMode.OVERWRITER);
    t2.commit();
    session2.close();
    
    EXCEPTION 存在标识符相同的对象将会抛出异常
    IGNORE 存在标识符相同的对象将会取消复制
    OVERWRITER 存在标识符相同的对象将会覆盖该对象
    LATEST_VERSION 复制过程中如果存在标识符相同的对象,将会比较两个对象版本号,游离态版本大的对象将会被复制
    不然复制过程将会被取消
    
    3.重新绑定游离态对象
    1.update() 2.merge()
    session.lock(book,LockMode.NODE)
    
    七.辅助对象管理
    Contains(Object)如果处于session上下文持久化范围内,返回true
    getIdentifier(Object)如果处于session上下文持久化范围内,返回对象标识符
    refresh(Object)从数据库中重新读取该对象的状态
    refresh(Object,LockMode)从数据库中重新读取该对象的状态并且使用给定的模式锁定该对象
    
    八.其他方法:
    1.管理连接
    connection()返回session相关联的数据库连接
    isConnection()返回true
    isOpen()
    isDirty()是否含有变化的对象
    close()
    2.管理缓存
    setCacheMode(CacheMode)
    NORMAL 从二级缓存中读取,并把对象写入缓存
    IGNORE 除非希望设置对象无效,否者session不与二级缓存进行交流
    GET 从二级缓存中读取对象,不写入,除非更新数据
    PUT 写入二级缓存,但不读取对象
    REFRESGH 类似PUT 但是会强势从数据库更新对象状态
    默认为NORMAL
 
 

。。

猜你喜欢

转载自blog.csdn.net/qq_40770950/article/details/82769443