主键的分类
1.自然主键表里面 有一个字段 符合主键的规则
就直接使用这个字段 作为主键
2.代理主键
表里面 没有一个字段 符合主键的规则
自己创建的 id 作为表的主键 这个键叫代理主键
主键生成策略(7种)
increment和identity主键 自增
increment由hibernate管理
插入数据时 会先去数据中查询当前的最大id
然后把查出来的id+1 再插入数据
identity使用数据库中的主键自增
插入时 打印sql中 不会插入id
uuid
全球不重复的唯一标识
注意:id必须使用字符串类型
native(最常用)
identity+序列+hilo
根据你使用的数据库类型来选择使用下面的3个策略之一
所有数据库不是支持identity就是序列
hilo(高低位算法)
将主键交给hibernate处理
使用自己的算法 帮你维护主键
assigned
由你自己维护主键 插入数据需要有主键使用的主键
序列 sequence oracle默认的
自动生成表结构
去etc/hibernate.properties下找update (常用)
自动生成表结构 如果映射文件和表不对应 将会修改表字段
但是原来表的字段不会改变 会新增字段
create
没次运行都会创建一个新的表出来(数据丢失)
create-drop
没次运行都会创建一个新的表出来
每次运行结束都会把表删了
validate
每次都会验证你的表结构 如果实体类与映射文件不同将会抛出一个异常
hibernate操作对象的3种状态
1.瞬时态 没有id 没有跟session产生关系2.持久态 有id 有跟session产生关系
3.游离态 有id 没跟session产生关系
设置隔离级别
默认隔离级别1 2 4 81.脏读
2.不可重复读
3.幻读
READ UNCOMMITED 隔离级别 1,2,3 1
READ COMMITED读未提交 2,3 2
REPEATABLE READ 读已提交 3 4
SERIALIZABLE 串行化 都能避免 8
隔离级别使用1个字节存储
0001
0010
0100
1000
如何封装一个方法获取session
public class HibernateUtil {
private static SessionFactory sessionFactory;
//获取session对象
static {
//读文件
Configuration configuration = new Configuration().configure();
//创建session工厂
sessionFactory = configuration.buildSessionFactory();
}
//获取session
//创建一个全新的session
public static Session getOpensession() {
return sessionFactory.openSession();
}
//获取当前使用的session
//注意 使用该方法 必须在主配置文件中设置
public static Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
}