session的几个主要方法

来源:互联网 发布:访客网速影响主网络吗 编辑:程序博客网 时间:2024/05/16 15:00

1.save,persist保存数据,persist在事务外不会产生Insert语句。
它们的区别在于:
若没开启事务,save方法会把数据写到数据库,然后由于没提交,会把该操作回滚,而persist不会把数据写入数据库。若开启事务,两者无区别。
2.delete, 删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
通常用于把脱管对象的修改写入数据库。
4.get, 根据id查,会立刻访问数据库。
例子:
User user = (User)s.get(User.class, id);
hibernate会由类的名字去找相应的映射文件,然后得知应该从哪个表中查找数据。
可以这样理解,由于session可以管理多个数据库表所对应的多个实体对象,如果要查询id为1的实体对象,session get方法需要知道从哪个数据库表中查询id为1的记录,所以,除了给get方法传递所要查询的实体对象的id值外,还必须给get方法传递实体对象的类型,get方法才能知道去哪个数据库表中进行查询。
5.load,根据id查,(返回的是代理,不会立即访问数据库)。
例子:
User user = (User)s.load(User.class, id);
System.out.println(user.getName());
也是从数据库里面查找数据,跟get方法不同的是,它采用的是懒加载的方式,即,不是马**问数据库得到数据,而是当程序段需要访问该对象时,才会去访问数据库,例如,在上面的例子,在user.getName()的时候才会去访问数据库,而不是调用load方法的时候去访问数据库。
同时,用load方法取出来的对象不可能为null(就算数据库里面不存在这样的记录)这是因为Load方法会先产生User这个class的子类,然后new一个该子类的对象,所以取出来的肯定不为null。
6.saveOrUpdate,merge(根据id和version的值来确定是save或update),调用merge你的对象还是托管的。
当不知道对象是托管还是持久的时候,可调用saveOrUpdate来保存对象,让hibernate来判断究竟是save还是update。
7.lock(把对象变成持久对象,但不会同步对象的状态)。

原创粉丝点击