zhanglinjian21 2009-07-08 00:36
浏览 241
已采纳

关于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缓存里面的持久化对象是不是副本?也就是说内存里面是不是有两个这样的对象?

  • 写回答

2条回答 默认 最新

  • liyistudio 2009-07-09 10:26
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥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端页面格式不对的问题