Java ejb3+;JPA2=具有空字段的反序列化对象
我在一个jar中有一个JPA注释对象和一个EJB远程接口,在war文件中部署了带有实体管理器的EJB无状态实现。我的客户机创建了一个新的对象实例,并通过网络发送它 但是,当在服务器端对其进行反序列化时,对象的每个字段都为null,并且包含其他字段,如Java ejb3+;JPA2=具有空字段的反序列化对象,java,persistence,ejb-3.0,jpa-2.0,entitymanager,Java,Persistence,Ejb 3.0,Jpa 2.0,Entitymanager,我在一个jar中有一个JPA注释对象和一个EJB远程接口,在war文件中部署了带有实体管理器的EJB无状态实现。我的客户机创建了一个新的对象实例,并通过网络发送它 但是,当在服务器端对其进行反序列化时,对象的每个字段都为null,并且包含其他字段,如\u persistence\u primaryKey。似乎服务器实现认为我的反序列化对象已经被管理了…但它不是…我如何通过连接传递对象,使其正确反序列化?如果实体管理器被注释掉,对象反序列化就很好了 请参见下面的代码示例: Chicken.java
\u persistence\u primaryKey
。似乎服务器实现认为我的反序列化对象已经被管理了…但它不是…我如何通过连接传递对象,使其正确反序列化?如果实体管理器被注释掉,对象反序列化就很好了
请参见下面的代码示例:
Chicken.java(JPA注释的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注入)
ChickenClient.java(带有注入远程EJB接口的JSF UI)
您的问题可能来自此问题 我在Glassfish 3.1.1中也遇到了同样的问题,分别使用了
EAR和WAR
persistence.xml中的此属性解决了我的问题:
<property name="eclipselink.weaving" value="false"/>
谢谢使用bug链接中描述的解决方法对我来说很有效,同时仍然允许延迟加载的编织。
@ManagedBean
@SessionScoped
public ChickenClient(){
@EJB private ChickenCreatorRemote ccr;
public void makeChicken(){
Chicken chicken = new Chicken();
chicken.setName("Bob");
ccr.createChicken(chicken);
}
}
<property name="eclipselink.weaving" value="false"/>