2012-08-01 24 views
1

我試圖創建一個PK類的JDO實體命名的項目。它是用JPA洙簡單,但我現在練JDO。我使用anotation配置,這兩個類什麼樣子:組合鍵在DataNucleus將JDO實現(場jdoStateManager)

@PersistenceCapable(table="ITEM",identityType = IdentityType.APPLICATION, 
    objectIdClass = ItemPK.class,schema="mgr") 
    public class Item { 

     @PrimaryKey 
     @Persistent(column="code") 
     private long code; //WHY public? 

     @PrimaryKey 
     @Persistent(column="producer") 
     private String producer; 


     @PrimaryKey 
     @Embedded 
     private ItemPK id; 

     @Persistent(column="price") 
     private double price; 

     @Persistent(column="name") 
     private String name; 

     @Persistent(column="description") 
     private String description; 

      [... getters/setters...] 
    } 

我想ItemPK類用作與thoose兩列(編號,生產商)主鍵類。因此,這是類的樣子:

@EmbeddedOnly 
    @PersistenceCapable(embeddedOnly="true",identityType=IdentityType.APPLICATION) 
    public class ItemPK implements Serializable{ 

     @Persistent 
     @PrimaryKey 
     public long code; 

     @Persistent 
     @PrimaryKey 
     public String producer; 

     @Override 
     public String toString() { 
       return code+"_"+producer; 
     } 

     @Override 
     public int hashCode() { 
     [...Eclipse autogenerated...] 
     } 

     @Override 
      public boolean equals(Object obj) { 
     [...Eclipse autogenerated...] 
     } 
     } 

嘗試運行的代碼之後我能得到什麼:據我瞭解的增強增加了jdoStateManager到ItemPK

[...Caused by] 
Nested Throwables StackTrace: 
Class pl.edu.pw.mini.entity.jdo.Item has been specified with an object-id class pl.edu.pw.mini.entity.jdo.ItemPK which has a field jdoStateManager which isnt Serializable. All non static fields of an objectId class must be serializable. 
org.datanucleus.metadata.InvalidPrimaryKeyException: Class pl.edu.pw.mini.entity.jdo.Item has been specified with an object-id class pl.edu.pw.mini.entity.jdo.ItemPK which has a field jdoStateManager which isnt Serializable. All non static fields of an objectId class must be serializable. 

,廣告無法序列化。但隨着ItemPK是嵌入式的,要麼它不應該得到jdoStateManager,或JDO應該知道jdoStateManager和常規領域之間的區別。我在做什麼錯得到一個嵌入類有2列主鍵

我不知道如何做這件事的工作,任何人都可以幫助我,並告訴我,我到底做錯了什麼?

回答

相關問題