我在一个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);
}
}
答案 0 :(得分:1)
您的问题可能来自此问题http://java.net/jira/browse/GLASSFISH-16164
我在Glassfish 3.1.1中遇到了与EAR and WAR
分开的相同问题
persistence.xml中的这个属性解决了我的问题:
<property name="eclipselink.weaving" value="false"/>