GAE/J - JPA错误 - 类型("")不是实体的类型,但需要用于此操作

Pie*_*ald 4 java google-app-engine jpa google-cloud-datastore

我对JPA有点绿,但我做了一些搜索,找不到这个错误代码所以我会在这里发布.

我正试着坚持这堂课:

@Entity(name = "UserBasket")
public class UserBasket extends BaseBasket implements Serializable  {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long Id;

    private static final long serialVersionUID = 1L;

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    public Long getId() {
        return Id;
    }

    public void setId(Long id) {
        Id = id;
    }


}
Run Code Online (Sandbox Code Playgroud)

用这个方法调用:

public Long createUserBasket(UserBasket basket) {
try{
        synchronized (this) {
            EntityManager em = EMFService.get().createEntityManager();
            em.persist(basket);
            em.close();
        }
    }catch(Exception ex){

        //log.severe("Uh oh!" + ex.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

java.lang.IllegalArgumentException: Type ("") is not that of an entity but needs to be for this operation
Run Code Online (Sandbox Code Playgroud)

我在GAE上运行它.我怀疑这与我的实体有关,但我不确定是什么.

编辑:填写更多详细信息 -

这是BaseBasket(我删除了getter和setter)

@Entity(name = "BaseBasket")
public class BaseBasket {

    public String basketID;
        public List<BasketItem> items;

}
Run Code Online (Sandbox Code Playgroud)

我创建了一个简单的UserBasket:

UserBaset b = new UserBasket();
Run Code Online (Sandbox Code Playgroud)

然后分配各种值.

我没有使用datanucleus增强器,这只是我天真的理解,它不是必需的,因为这些对象(UserBasket等)在我的应用程序的客户端和服务器部分之间共享,我想让它们保持简单.

Ale*_*tet 5

由于您使用的是JPA,请检查您的persistence.xml定义是否符合DataNucleus文档

特别是,如果您没有使用映射文件,请检查要保留的所有实体是否在classes元素中声明.如提供的示例:

<!-- Online Store -->
<persistence-unit name="OnlineStore">
    <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
    <class>org.datanucleus.samples.metadata.store.Product</class>
    <class>org.datanucleus.samples.metadata.store.Book</class>
    <class>org.datanucleus.samples.metadata.store.CompactDisc</class>
    <class>org.datanucleus.samples.metadata.store.Customer</class>
    <class>org.datanucleus.samples.metadata.store.Supplier</class>
    <exclude-unlisted-classes/>
    <properties>
        <property name="datanucleus.ConnectionDriverName" value="org.h2.Driver"/>
        <property name="datanucleus.ConnectionURL" value="jdbc:h2:datanucleus"/>
        <property name="datanucleus.ConnectionUserName" value="sa"/>
        <property name="datanucleus.ConnectionPassword" value=""/>
    </properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)