簡體   English   中英

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

[英]EJB 3 + JPA2 = Deserialized Object with null fields

我在一個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);
    }   
}

您的問題可能來自此問題http://java.net/jira/browse/GLASSFISH-16164

我在Glassfish 3.1.1中使用單獨的EAR and WAR也遇到了同樣的問題。
persistence.xml中的這個屬性解決了我的問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM