hibernate session 自动保存?
答案:3 悬赏:80
解决时间 2021-02-16 15:24
- 提问者网友:他的思颖
- 2021-02-16 00:20
获得一个实体后,我set了一个值,没做update为什么会更新数据库
最佳答案
- 二级知识专家网友:桑稚给你看
- 2021-02-16 01:53
session里的pc ,当一个实体被托管以后, 会自动跟数据库里同步的
具体可以打个断点,看一下
具体可以打个断点,看一下
全部回答
- 1楼网友:情战辞言
- 2021-02-16 03:42
你对flush和commit的意思没有理解到:
1,flush代表刷新,同步一级缓存中的对象到数据库中,仅仅代表把sql刷到了数据库中,
2,commit代表提交事务,tx.commit之后,之前发送的sql才真正提交了,数据表里面才有值;
3,在默认情况下,commit之前都要自动调用flush,
所以:
1,session.save();session.flush()只是把sql发到了数据库中,事务没有提交,数据表中还是没有数据的,
2,session.save(),transaction.commit(),在commit的之前,隐含调用了flush,即发送了sql,又提交了事务,所以有值;
你可以看看我的个人说明,里面有hibernate的更详细的视频资料。希望对你有用。
- 2楼网友:茫然不知崩溃
- 2021-02-16 03:31
1 hibernate会保存数据副本,也就是session
2 hibernate是否会吧副本中的数据库更新保存到db,由三态决定(俗语)
A transient 暂时滴 跟hibernate没关系的都是transient
比如你数据库中有book实体. 你在任意一个地方new Book();都是transient.他不会更新到db(要更新才见鬼呢)
总结:内存中自由存在.跟db无关(啥叫无关?看B就明白了)
B Persistent 持久滴.从db中取出来的都是persistent.
比如Object o = session.get();
这个o对象,你一旦set,就会persistent到db.这就是你上边说的自动保存
总结:从db中取出来的(当然还有别的方式)
c Detached 分离.从db中取出来之后,session关了. 你set任意属性,hibernate想给你自动保存,也不可能啊
这段精华值 200块钱. 你得给我加分噻
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |