Session的几个主要方法
1.save、presist保存数据,presist在事务外不会产生insert语句。
2.delete删除对象。
3.update更新对象,如果数据库中没有记录,会出现异常。
4.get根据ID查询,会立刻访问数据库。
5.load根据ID查询,返回的是代理,不会立即访问数据库。
6.saveOrUpdate,merge根据ID和version的值来确定是save或update,调用merge你的对象还是托管的。
7.lock把对象变成持久对象,但不会同步对象的状态。
----------------------------------------------------------------------------------------------------------------------------------------
hibernate对象的三种状态
瞬时(transient):数据库中没有数据与之对应,超过作用域会被jvm垃圾回收器回收,一般是new出来且与session没有关联的对象。
持久(presistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交:持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能够用检测到)。
托管(detached):数据库中有数据与之对应,但当前没有session与之关联:托管对象状态发生改变,hibernate不能检测到。(也称为游离态)
----------------------------------------------------------------------------------------------------------------------------------------
Query主要注意的方法
1.list以List集合的方式返回查询的数据
2.createQuery创建一个Query对象
3.uniqueResult当确定返回值只有一条时,使用该方法,否则报异常
4.setFirstResult、setMaxResults用于分页,hibernate通过配置文件中的方言来写不同的分页sql语句。
5.setString可以通过字符串来给hql语句赋值。
----------------------------------------------------------------------------------------------------------------------------------------
HQL(Hibernate Query Language)
hql与sql不同,hql是面向对象的语句,而sql是面向数据库的语句。
hql在数据库中是通用的,只需要在配置文件中修改方言就可以了,hibernate会对hql语句翻译成相对于数据库的sql语句。