来自GAE数据存储的JPA错误

时间:2011-10-18 05:55:00

标签: java google-app-engine jpa google-cloud-datastore

我正在尝试让我的GAE应用程序从数据存储区中提取一些记录,但仍然可以获得此信息:

javax.persistence.PersistenceException: Class PersistableItem for query has not been resolved. Check the query and any imports specification

这是来自这里的方法:

public List<PersistableItem> listItems() {
    EntityManager em = EMFService.get().createEntityManager();
    // Read the existing entries
    Query q = em.createQuery("select * from PersistableItem");
    List<PersistableItem> items = q.getResultList();
    return items; 
}

据我所知,这是关于导入我的PersistableItem类但我很困惑,因为我已经在.java代码文件中这样做了。

3 个答案:

答案 0 :(得分:2)

类“PersistableItem”是否存在于项目中(或者是项目的依赖项)。它是否具有@Entity类级别注释。它是否实现Serializable。在你的JPQL中尝试使用类的完全限定名称(“select * from package1.package2.PersistableItem”)

答案 1 :(得分:2)

错误消息很奇怪,因此这可能不是您唯一的错误,但您的查询错误。 select *是SQL,而不是JPQL。正确的查询是

select p from PersistableItem p

答案 2 :(得分:2)

即使使用正确的JPQL查询也遇到了同样的错误,并解决了在persistence.xml中添加类声明的问题

<persistence-unit name="appengine-transactions-optional">
    <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
    <class>it.gustaff.data.Place</class>
    <class>it.gustaff.data.Menu</class>
    <properties>
        <property name="datanucleus.NontransactionalRead" value="true"/>
        <property name="datanucleus.NontransactionalWrite" value="true"/>
        <property name="datanucleus.ConnectionURL" value="appengine"/>
    </properties>
</persistence-unit>