gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:21 24 4
gpt4 key购买 nike

我在一个 jar 中有一个 JPA 注释对象和一个 EJB 远程接口(interface),并且在一个 war 文件中部署了注入(inject)实体管理器的 EJB 无状态实现。我的客户创建了一个对象的新实例并通过网络发送它。

然而,当它在服务器端被反序列化时,对象的每个字段都为空,而且还包含其他字段,如 _persistence_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(带 JPA 注入(inject)的无状态 EJB)

@Stateless
public class ChickenCreator implements ChickenCreatorRemote{

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

public ChickenCreator(){
}

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

}

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

@ManagedBean
@SessionScoped
public ChickenClient(){

@EJB private ChickenCreatorRemote ccr;

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

最佳答案

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

我在使用单独的 EAR 和 WAR 的 Glassfish 3.1.1 中遇到了同样的问题。
persistence.xml 中的这个属性解决了我的问题:

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

关于java - EJB 3 + JPA2 = 具有空字段的反序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com