【问题标题】:JPA error from GAE data storeGAE 数据存储中的 JPA 错误
【发布时间】:2011-10-18 05:55:00
【问题描述】:

我正在尝试让我的 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 代码文件中这样做了。

【问题讨论】:

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


    【解决方案1】:

    错误信息很奇怪,所以这可能不是您唯一的错误,但您的查询是错误的。选择 * 是 SQL,而不是 JPQL。正确的查询是

    select p from PersistableItem p
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        即使使用正确的 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-12
          • 2015-06-20
          • 2013-11-01
          • 2014-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多