EJB 3 + JPA2 =具有空字段的反序列化对象

时间:2011-10-05 20:38:36

标签: java persistence ejb-3.0 jpa-2.0 entitymanager

我在一个jar中有一个JPA Annotated Object和一个EJB远程接口,并且在war文件中部署了Entity Manager注入的EJB Stateless实现。我的客户端创建了一个新的对象实例并通过网络发送它。

但是,当它在服务器端反序列化时,对象对每个字段都为null,而且包含其他字段,如_persistence_primaryKey。似乎服务器实现认为我的反序列化对象已经被管理了......但它不是......我如何通过线传递对象以便正确反序列化?如果实体管理器被注释掉,则对象反序列化就好了。

请参阅下面的代码示例:

Chicken.java(JPA Annotated POJO)

@Entity
@Table(name="Chicken")
public class Chicken implements Serializable{

    /**
     *serial version id 
     */
     private static final long serialVersionUID = 1L;

     @Id
     @Column(name="ID")
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;

     @Column(name="NAME")
     private String name;

     public Chicken(){
     }

     public void setName(String name){
        this.name = name;
     }

     public String getName(){
         return name;
     }
}

ChickenCreator.java(无状态EJB w / JPA注入)

@Stateless
public class ChickenCreator implements ChickenCreatorRemote{

  @PersistenceContext(unitName="DataStore") private EntityManager em;

  public ChickenCreator(){
  }

  public createChicken(Chicken chicken){
     em.persist(chicken);
  }

} 

ChickenClient.java(带注入的远程EJB接口的JSF UI)

@ManagedBean
@SessionScoped
public ChickenClient(){

    @EJB private ChickenCreatorRemote ccr;

    public void makeChicken(){
       Chicken chicken = new Chicken();
       chicken.setName("Bob");
       ccr.createChicken(chicken);
    }   
}

1 个答案:

答案 0 :(得分:1)

您的问题可能来自此问题http://java.net/jira/browse/GLASSFISH-16164

我在Glassfish 3.1.1中遇到了与EAR and WAR分开的相同问题 persistence.xml中的这个属性解决了我的问题:

<property name="eclipselink.weaving" value="false"/>