关于hibernate的一点小问题

最近正在学习hibernate,遇到了不少问题
1, public void testAA1(){
HibernateUtil.beginTransaction();
Session session=HibernateUtil.getCurrentSession();
Student ss=new Student();
ss.setId(new Integer(2));
ss.setName("zz");
session.saveOrUpdate(ss);
session.getTransaction().commit();
session.close();
}
hibernate在执行是为发出sql语句:Hibernate: update student set name=?, roomid=? where id=?
其中id=2,问题:我的数据库里面没有id=2的记录,为什么更新时没有报错?
2,在一对多的单向关联里面,表B的外键roomid引用表A的主键id,其中roomid为非空,问:在session.save(表A的一个临时对象)时,hibernate会发出很多sql语句,其中有一条是insert 表A的语句,然后update 表A,为什么我的roomid为非空,而insert 表A为成功呢?
3,session缓存里面的持久化对象是不是副本?也就是说内存里面是不是有两个这样的对象?

问题1:session.saveOrUpdate(Object entity)方法工作原理是,先到查看缓存中是否有这个条记,有就更新这条记录,没有就插入一条新记录,因为出现在update语句就不奇怪了吧
问题2:... 就是将update,insert两个的值设置成false就可以解决。肯定你是双向关联,而你将rinverse="false"
问题3:不是有两个这样的对象,是将持久对象缓存起来了。建议仔细看看hibrenate二级缓存机制。

session.saveOrUpdate(ss);
可能保存或更新,它发出这条sql,应该是数据库里有这条记录