123
返回列表 发新帖
楼主: 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
21#
发表于 2009-1-3 19:39 | 只看该作者
原帖由 jsjjsj 于 2009-1-3 18:42 发表

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

兄弟你还是试过在说话吧

使用道具 举报

回复
论坛徽章:
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
22#
 楼主| 发表于 2009-1-4 09:50 | 只看该作者
我上面的代码就是试过的呀,底下的stdout是console输出的,后面的DB数值是我用mysql manager查到的

使用道具 举报

回复
论坛徽章:
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
23#
发表于 2009-1-4 11:27 | 只看该作者
entity2=entityManager.merge(entity1);
你比比看看这两个entity是不是一样, 比reference

使用道具 举报

回复
论坛徽章:
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
24#
 楼主| 发表于 2009-1-4 12:58 | 只看该作者
entity2=entityManager.merge(entity1);
System.out.println("username equal is "+ entity2.equals(entity1));
//12:57:36,676 INFO  [STDOUT] username equal is true

使用道具 举报

回复
论坛徽章:
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
25#
 楼主| 发表于 2009-1-4 12:59 | 只看该作者
public void testmerge() {
                LogUtil.log("testmerge saving Student instance", Level.INFO, null);
                try {
                        entity.Student entity2;
                        entity.Student entity1 = findById(15);
                        System.out.println("username 15st is "+entity1.getUsername());
                        //[STDOUT] username 15st is test refresh
                       
                        entity1.setUsername("merge");
                        //System.out.println("username new is "+ entity1.getUsername());
                        //[STDOUT] username new is merge
                        entity2=entityManager.merge(entity1);
                        System.out.println("username after merge is "+ entity1.getUsername());
                        System.out.println("username equal is "+ entity2.equals(entity1));
                        //[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"
                       
                        LogUtil.log("undo save successful", Level.INFO, null);
                } catch (RuntimeException re) {
                        LogUtil.log("undo save failed", Level.SEVERE, re);
                        throw re;
                }
        }

使用道具 举报

回复
论坛徽章:
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
26#
发表于 2009-1-4 14:07 | 只看该作者
丫的看题目不仔细

使用道具 举报

回复
论坛徽章:
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
27#
发表于 2009-1-4 14:08 | 只看该作者
1. 要是detached
2.比reference

使用道具 举报

回复
论坛徽章:
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
28#
 楼主| 发表于 2009-1-4 16:11 | 只看该作者
reference的确是不一样
不过我就不太理解,为什么jvm要费劲的copy出一个新生的entity,而不用原来的呢??生成一个新的entity还要把原先的数值copy到新的entity中,从jvm效率的角度看,不划算呀?
entityManager.clear();
                        entity2=entityManager.merge(entity1);
                        System.out.println(entity1);
                        System.out.println(entity2);
                        System.out.println("username entity1==entity2 is "+ (entity2==entity1));

15:51:52,739 INFO  [STDOUT] entity.Student@66b1f4
15:51:52,739 INFO  [STDOUT] entity.Student@1422757
15:51:52,739 INFO  [STDOUT] username entity1==entity2 is false

使用道具 举报

回复

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

本版积分规则 发表回复

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