楼主: jsjjsj

EJB3的entityManager.refresh(entityManager.merge())问题,牛人请进!

[复制链接]
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
11#
发表于 2009-1-3 12:55 | 只看该作者
暂时也只能那么理解了

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
12#
发表于 2009-1-3 13:06 | 只看该作者
楼主MERGE的场景非常复杂,使用时候要小心了!

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
13#
发表于 2009-1-3 13:09 | 只看该作者
给你一个例子,细细体味

merge前:

无标题.jpg (32.66 KB, 下载次数: 11)

无标题.jpg

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
14#
发表于 2009-1-3 13:10 | 只看该作者
merge后:

无标题.jpg (35.87 KB, 下载次数: 12)

无标题.jpg

使用道具 举报

回复
论坛徽章:
4
2009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猪
日期:2009-03-10 21:31:23设计板块每日发贴之星
日期:2010-03-20 01:01:05ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
15#
 楼主| 发表于 2009-1-3 14:22 | 只看该作者
谢谢地虎
你的这个例子是不是merge(employee),对于department和phone的cascade是all或者merge,但是address是没有cascade的?

使用道具 举报

回复
论坛徽章:
4
2009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猪
日期:2009-03-10 21:31:23设计板块每日发贴之星
日期:2010-03-20 01:01:05ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
16#
 楼主| 发表于 2009-1-3 14:24 | 只看该作者
写了一个程序做了一下测试,基本验证了先前的讨论,有兴趣的可以体会一下,DB中username原始值是“virgin”
entity1.setUsername("merge");
System.out.println("username new is "+ entity1.getUsername());
//[STDOUT] username new is merge
entityManager.merge(entity1);
System.out.println("username after merge is "+ entity1.getUsername());
//[STDOUT] username after merge is merge;但是DB 中的数值依然是 "virgin"
                       
                        entityManager.refresh(entity1);
System.out.println("username after refresh is "+ entity1.getUsername());
//[STDOUT] username after refresh is virgin; DB 中的数值依然是 "virgin"
                       
entity1.setUsername("refresh merge");
entityManager.refresh(entityManager.merge(entity1));
System.out.println("username after refresh merge is "+ entity1.getUsername());
//[STDOUT] username after refresh merge is virgin;DB 中的数值依然是 "virgin"

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
17#
发表于 2009-1-3 14:35 | 只看该作者
entityManager.merge(entity1);
System.out.println("username after merge is "+ entity1.getUsername());
这边有点小问题,
entity1如果是detached, merge会返回一个新的object, 所以entity1是不会变的,如果没记错的话

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
18#
发表于 2009-1-3 14:41 | 只看该作者
原帖由 jsjjsj 于 2009-1-3 14:22 发表
谢谢地虎
你的这个例子是不是merge(employee),对于department和phone的cascade是all或者merge,但是address是没有cascade的?

老虎是地虎!

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
19#
发表于 2009-1-3 17:49 | 只看该作者
原帖由 Sky-Tiger 于 2009-1-3 14:41 发表

老虎是地虎!

呵呵

使用道具 举报

回复
论坛徽章:
4
2009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猪
日期:2009-03-10 21:31:23设计板块每日发贴之星
日期:2010-03-20 01:01:05ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
20#
 楼主| 发表于 2009-1-3 18:42 | 只看该作者
原帖由 justforregister 于 2009-1-3 14:35 发表
entityManager.merge(entity1);
System.out.println("username after merge is "+ entity1.getUsername());
这边有点小问题,
entity1如果是detached, merge会返回一个新的object, 所以entity1是不会变的,如果没记错的话

不会的,如果entity是detached,merge会返回同一个entity,只不过此时的entity的状态是managed的,而不是detached,但是不会生成一个新的entity,因为detached的entity只不过不受persitence context管理,但是它自身还是保留有persistence identity的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表