Java DataNucleus JDO实现中的复合键(字段jdoStateManager)

Java DataNucleus JDO实现中的复合键(字段jdoStateManager),java,key,jdo,datanucleus,composite,Java,Key,Jdo,Datanucleus,Composite,我正在尝试为名为Item的JDO实体创建一个PK类。JPA很简单,但现在我在练习JDO。我使用的是Anotion配置,这两个类的外观如下: @PersistenceCapable(table="ITEM",identityType = IdentityType.APPLICATION, objectIdClass = ItemPK.class,schema="mgr") public class Item { @PrimaryKey @

我正在尝试为名为Item的JDO实体创建一个PK类。JPA很简单,但现在我在练习JDO。我使用的是Anotion配置,这两个类的外观如下:

    @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类用作主键类,包含两列(代码、生产者)。这就是这个类的样子:

    @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...]
        }
        }
尝试运行代码后,我会得到什么:

[...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.
据我所知,增强器将jdoStateManager添加到ItemPK,因为它是不可序列化的。但是,由于ItemPK是嵌入式的,它要么不应该获得jdoStateManager,要么JDO应该知道jdoStateManager和常规字段之间的区别。为2列主键获取嵌入式类有什么错


我不知道该怎么做,有谁能帮我一下,告诉我我做错了什么吗?

文档对如何做定义得非常清楚
而且它不涉及使用@Embedded

谢谢,我误解了@Embedded注释