1.Hibernate对类文件的要求(即对映射为数据库表的类):
a.最好不要是final类型的,这个对lazy加载会有影响
b.可选id(最好有id,当然,也可以没有)
c.必须 有一个默认不带参数的构造函数
2.在用SessionFactory的时候,只让它初始化一次,多次使用。因为读取配置文件很需要时间。
这样写,构造一个final的HibernateUtil类:
package com.HibernateDemo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static SessionFactory sessionFactory;
private HibernateUtil()
{
//静态的构造方法,让类不能被new
}
//当虚拟机加载类时,就调用static中的代码
static{
Configuration cfg=new Configuration();
cfg.configure();
sessionFactory=cfg.buildSessionFactory();
}
//返回SessionFactory
public static SessionFactory getSessionFactory()
{
return sessionFactory;
}
//返回Session
public static Session getSession()
{
Class sessionClass=Session.class;
return sessionFactory.openSession();
}
}
3.cfg.configure();就是读取hibernate.cfg.xml文件,也可以不叫这个名字,但就需要在括号中写文件名了。
4.User.Class,返回的就是一个Class类型的对象,它包含User类中所有的信息,包括类名、属性及方法等
5.load和get的区别:
load不立即访问数据库,它在第一次使用时才访问数据库。
6.save和persist的区别:
在不开事务时,save插入insert语句然后再回滚;persist没有插入
7.对象的状态:
a.瞬时:对象在数据库中没有与之对应的记录,与Session也没有关系;
b.持久:对象在数据库中有与之对应的记录,与Session相关;
c:脱管:对象在数据库中有与之对应的记录,与Session无关;
new一个对象时,对象为瞬时;当save()时,对象为持久;当操作完成,Session关闭时,对象为脱管。