hibernate Session的几个简单方法

来源:互联网 发布:手游源码出售 编辑:程序博客网 时间:2024/05/22 21:47

News news1=new News("DD", "dd");session.persist(news1);

flush()方法

    //flush()方法:使数据库中的记录和Session中的记录保持一致,为了保持一致可能会发送对应的sql语句
    //Transaction.comit()方法中  会先执行Session.flush(),再提交事务
    //**注意: 在未提交事务或者未使用flush()方法时,也有可能会进行flush()方法
    //1)执行HQL或者QBC查询时,会先进行flush()方法。


save()方法

    //save()方法使一个临时对象转换为持久化对象,执行insert操作
    //为对象分配ID
    //在flush缓存时发出一天insert语句
    //持久化对象的id不可修改.使用映射文件指定的方法生成ID;


Persit()  同save()方法,执行insert操作

     当id不为零时,save会以一个新的id保存到数据库,persit()则会抛出异常

<span style="font-size:18px;">       News news=new news(1,"title","test");       session.save(news);</span>

get()     load()
     Get和Load方法  持久化对象转为临时对象(就是从数据库中获得对象)
     执行Get方法会立即执行查询操作加载对象
     Load方法不会立即执行查询操作,返回一个代理对象。当使用时再进行查询。
     若数据表中没有对应数据,get返回一个空的对象,load抛出异常
     Load方法,在初始化代理对象之前就关闭Session
     会抛出异常LazyInitialazytionException

@Testpublic void testGet(){News news=(News)session.get(News.class, 5);System.out.println(news);}@Testpublic void testLoad(){News news=(News)session.load(News.class, 5);System.out.println(news.getClass().getName());}
update()

     若更新对象在session中,不需要显示的调用update(), commit()方法会自动update;
     不在session中时 处于游离状态,需要调用update()方法;
     调用update时无论更新的对象是否与数据表里的一致都会执行update操作
     ----如何避免   在.hbm.xml.配置文件中的 class节点设置select-before-update=true
     当update()方法关联一个游离对象时,如果session中已经存在一个相同ID的对象,抛出异常
    

public void testUpdate(){News news=(News)session.get(News.class, 5);news.setAuthor("123");session.clear();System.out.println("123");session.update(news);}


1 0