总共有三条关于hibernate的深入问题, 请高手帮忙解答, 谢谢!
请先看以下hibernate示例:
// 在数据库里有2张表(teacher和student)
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
Teacher t = new Teacher();
t.setName("t1");
Student s = new Student();
s.setName("s1");
t.save(t);
s.save(s);
tx.commit();
} finally {
if(null != session)
session.close();
}
第一个问题: 当事务提交后之后, hibernate先把该对象放入一级缓存中再放入数据库吗? 还是先放入数据库再放入一级缓存?
第二个问题: 一本著名的hibernate书上说:"当一个瞬时状态的对象调用save方法后会进入持久化状态, 同时hibernate会将该对象放入一级缓存的map集合当中. session的一级缓存里有个map集合, 该map集合的key存放的是整型的OID值, 此OID必须是唯一的, 专门用来标识不同的对象, 如果该对象在save操作之前数据库里没有记录, 那么该对象的OID值是1"
我的疑惑是, 当以上2个对象被save之后, hibernate会把他们放入map集合里去, 但是他们在数据库里都没有初始的记录, 难道他们在map集合里的OID值都为整型的1吗, 请问该map集合如何区别不同的2个对象?
第三个问题: 一级缓存里的map集合是在commit之后被清除吗?还是在session.close之后才被清除?
分数不多, 只有80分, 倾尽全部求帮忙, 谢谢!
本人是讲师, 需要跟学生们讲课, 请大家抱着严谨的学术态度来回答我的问题, 如不能保证您的回答是绝对正确的, 请别误人子弟, 十分感谢!