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列主鍵
我不知道如何做這件事的工作,任何人都可以幫助我,並告訴我,我到底做錯了什麼?
感謝的,是我誤會@Embedded批註 – maslan 2013-04-01 17:16:36