最近正在学习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缓存里面的持久化对象是不是副本?也就是说内存里面是不是有两个这样的对象?
关于hibernate的一点小问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- liyistudio 2009-07-09 10:26关注
问题1:session.saveOrUpdate(Object entity)方法工作原理是,先到查看缓存中是否有这个条记,有就更新这条记录,没有就插入一条新记录,因为出现在update语句就不奇怪了吧
问题2:... 就是将update,insert两个的值设置成false就可以解决。肯定你是双向关联,而你将rinverse="false"
问题3:不是有两个这样的对象,是将持久对象缓存起来了。建议仔细看看hibrenate二级缓存机制。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
- ¥15 NAO机器人的录音程序保存问题
- ¥15 C#读写EXCEL文件,不同编译
- ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
- ¥15 扩散模型sd.webui使用时报错“Nonetype”
- ¥15 stm32流水灯+呼吸灯+外部中断按键
- ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
- ¥15 NX MCD仿真与博途通讯不了啥情况
- ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
- ¥15 gradio的web端页面格式不对的问题