本人是一个菜鸟,最近在学习EJB,看了好基本关于EJB的书
(1)Rmia Patel Sriganesh 的 Mastering Enterprise JavaBeans 3.0
(2)黎活明的 EJB3.0入门经典
(3)冯曼菲的 EJB JPA数据库持久层开发实践详解可能我理解能力不够强,看关于实体生命周期时总理解的不透彻(有些书还自相矛盾,比如书(3)将4态模型还分裂成了5态模型)。当然了,这几本书好像关于类似的话题讲解的也不太详细,有点避而不谈的味道。
貌似他们总结的EntityManager操作触发的过程也就是
A. persist()方法用于将新创建的实体纳入实体管理器的管理
B. merge()方法用于处理实体的同步。用于将detached状态的实体重新纳入持久上下文管理范围。
C.remove()方法用于从数据库中删除某条记录,但是并不删除还在内存中的实体。但是这些仅仅给出了某些情况,但是冰没有给出全部的情况。有没有哪位高手研究透彻的,能给出处在任何状态下的实体,调用这些方法可能出现的情况呢?
完成这样的表格,给出每种情况下 em.XX()方法的参数变化和返回值变化?(em为EntityManager的实例)实体A状态所处状态         em.persist(A)      em.merge(A)        em.remove(A)
new                
attached
detached
removed
并且最好结合下面例子阐述,为什么这个方法会抛出异常,并且哪里会抛出异常例子 假设有个new 的实体Order o,作为实参被传递给某个SessionBean的业务方法
       @PersistenceContext EntityManager em;     //第一行
       public boolean test(Order o){             //第二行
          boolean b = false;                     //第三行
          o=em.merge(o);                         //第四行
          em.remove(o);                          //第五行
          o=em.merge(o);                         //第六行
          b=em.contains(o);                      //第七行
          return b;                              //第八行
       }
谢谢。 100分奉上

解决方案 »

  1.   

     1.session Bean 
    有状态会话Bean实例有三种状态,不存在,就绪,和钝化。
    无状态会话Bean实例就两种状态,不存在和就绪.
     2.实体bean
    实体bean有三种状态,不存在,在pool中,就绪
     3.mdb 消息bean
    消息bean就两种状态:不存在和就绪
      

  2.   

    没用用过实体bean,但我觉得是不是和hibernate管理状态类似呢
      

  3.   

    o=em.merge(o);                         //a
    em.remove(o);                          //b
    o=em.merge(o);                          //ca   merge:一个脱离实体管理器管理的bean,比如person1,被修改之后,被传回后台,如果调用merge,将有两种情况发生
    1 如果持久化上下文中有与这个bean相同id的bean存在,则把person1的属性赋值给上下文中的那个bean,然后将那个bean返回,而person1还是一个不受实体管理器管理的bean,返回那个Person是收管理的,对他的修改,会直接刷新到数据库;
    2 如果持久化上下文中有与这个bean相同id的bean不存在,则创建一个该person1的拷贝,然后返回,对这个拷贝的set操作,会直接影响到数据库b   remove:执行em.remove(person1),会删除数据库中的该条记录(在调用flush之后才会真正删除),此时person1并不会消失,而是变成一个不受到实体管理器管理的bean
    c   merge:再次调用merge(person1)时候,会进行上面的1操作希望楼主知道我再说什么,呵呵
      

  4.   


    以前学习过EJB,不过没理解透彻,受教了.