was altered from
| 如一个对象为User,多对应一个组Guoup,当修改一个用户的Group时,出现identifier of an instance of Group was altered from 1 to 7异常。 出现这个异常的原因我大概知道,因为当修改一个User时,从数据库load了User实例,同时load了该User实例对应的Group实例,而对User修改其Group属性时,因对应Form中直接修改了其User.Group.Id属性值,而Group对象仍是原来load出来的对象,所以在save时,JPA不认为这是User更改了其Group对象,而是认为直接更改了该Group对象的Id值,所以就会出现identifier被更改的异常。我知道可用方法类似于再新建一个Group,赋新值,再将该Group赋值给User可实现,但现在就想问一下有没有其他办法,不新建Group,而在更改其属性User.Group.id的时候,只更改User的GroupId外键值而不去更改Group,因为本身这样才合理,我Save的是User,而User和Group之间又没设置级联操作,为什么一定要去Save一个Group呢?不理解,求教。 分享到: 相关主题推荐: 异常 instance object 数据库 对象 相关帖子推荐:
|
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:16 |
| #1 得分:5 回复于: 2012-07-05 11:55:00 你使用的hibernate?如果是的话,就把主键方,配置文件中 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #2 得分:0 回复于: 2012-07-05 15:21:40 我用的是jpa,我搜了下在JPA中是以mappedBy来表示维护端的,而我不管配置不配置OneToMany(有没有mappedBy),都是这样的错误。 |
| 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 |
| #3 得分:0 回复于: 2012-07-06 09:10:37 请高手解答啊,急等。 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #4 得分:0 回复于: 2012-07-13 15:32:19 没有合适的做法,只好在修改的时候在新建一个外键对象然后传给要修改的对象。还是希望有人能有更好的做法。 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #5 得分:1 回复于: 2012-11-29 15:35:42 求解 一模一样的问题 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #6 得分:27 回复于: 2013-03-15 12:11:57 原因是缓存导致, 你需要在通过id回去Group前 clear()缓存就可以了。 因为在get前缓存中有Group的缓存对象或者是个没有加载数据的代理对象,而且这个对象呗form提交的数据修改了id,此时通过form传过来的id去get这个Group对象 则直接在缓存中找到了 所以在flush的时候就报修改id的错误了。 说好的50分哦 哥们! |
| 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 |
| #7 得分:0 回复于: 2013-03-21 16:56:43 你说的clear缓存在什么地方执行?能否提供一段代码?五十分肯定给的了,不要着急。 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #8 得分:5 回复于: 2013-04-25 23:16:16 是你*.hbm.xml映射文件中的属性 type类型设置的和你实例化java对象中的属性的类型不一致了 我今天晚上也遇到这个问题了 搞了好久才找出来的 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #9 得分:1 回复于: 2014-04-01 17:49:50 请问解决了吗?是怎么解决的呢? |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #10 得分:1 回复于: 2014-06-05 17:47:54 为何没有下文了呢 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #11 得分:5 回复于: 2014-07-15 10:20:45 changeAuditDao.clear(); changeAuditDao.save(changeAudit); |
| 对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理 |
| #12 得分:5 回复于: 2014-12-15 17:56:17 第一次回复还有QQ表情啊!!我是参考书籍sql.sql先建表 自增ID AUTO_INCREMENT=30 我预先插入2-29(含头含尾)然后在hibernate程序里 手动设置ID为1并添加到 1的位置就报这个错误,希望给你做个参照 这回复符合程序员风格 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #13 得分:0 回复于: 2014-12-15 17:57:34 我的意思是回复输入框符合 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #14 得分:0 回复于: 2015-01-19 11:31:39 今天才发现这个贴子还没结,我最终的解决方案还是根据新的group_id值创建一个对象(或者查找也一样),再赋值给user了。当我把这段代码写入一个基类重复调用后,也不觉得麻烦了。当然这个问题如果有更好的办法我依然会关注,如果找到了我会在我博客里贴出来。但这个贴子太久了,所以结贴了,谢谢各位的回复。 |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #15 得分:0 回复于: 2015-03-04 17:20:43 我是按照11楼的方法解决了此问题,3q |
| 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
| #16 得分:0 回复于: 2015-03-25 14:22:57 按照6楼方法解决了问题。。。赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
第一次回复还有QQ表情啊!!我是参考书籍sql.sql先建表
赞 赞 