一、先看一下对象状态吧
有三中状态:(1)瞬时(transient); 大概理解就是new 出来的,没有数据库与之对应,超过作业域就会被jvm所回收
(2)持久(persistent);就是与数据库有之对应,这时session没有关闭,事务没有提交(hibernate可以检测到)
(3)脱管(detached);数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到。
二、上次我就介绍了一点关于hql 和criteria
hql是面向对象的查询语言(基于sql扩展而来的,主要特点是面向对象)
criteria是条件查询语言(它可以使对sql语言不熟悉的同学进行使用)
eg:
public class Cri {
public static void main(String[] args) {
criteria("name");
}
static void criteria(String name){
Session s = null;
try{
s = HibernateUtils.getSession();
Criteria c = s.createCriteria(User.class); //关于User这个类的条件
c.add(Restrictions.eq("name", name)); //name == name
c.add(Restrictions.lt("birthday", new Date())); // birthday < new Date()
c.setFirstResult(0); //可以设置分页
c.setMaxResults(10);
List<User> list = c.list(); //取出User中的所有数据
for(User user : list){
System.out.println(user.getName());
}
}finally{
if(s != null){
s.close();
}
}
}
}