【问题标题】:i have this exception when execution of Entity Manager Factory creation statement执行实体管理器工厂创建语句时出现此异常
【发布时间】:2015-12-12 15:12:21
【问题描述】:

当执行这个从数据存储中进行选择的java代码时,由于第一行出现了一个异常,那么我该如何解决这个异常呢? 例外:

javax.persistence.PersistenceException: Explicit persistence provider error(s) occurred for "transactions-optional" after trying the following discovered implementations: org.datanucleus.api.jpa.PersistenceProviderImpl from provider: org.datanucleus.api.jpa.PersistenceProviderImpl

代码:

PrintWriter out = resp.getWriter();
try {
    EntityManagerFactory emfactory = Persistence
            .createEntityManagerFactory("transactions-optional");
    EntityManager entitymanager = emfactory.createEntityManager();
    javax.persistence.Query query = entitymanager.createQuery("Select u from test u");
    List<test> list = (List<test>) query.getResultList();
    out.print(list.size());
} catch (Exception e) {
    out.println(e.toString());
} finally {
    out.close();
}

persistence.xml:

	<persistence-unit name="transactions-optional">
		<provider>
		org.datanucleus.store.appengine.jpa.DatastorePersistenceProviderImpl
</provider>
		<properties>
			<property name="datanucleus.NontransactionalRead" value="true" />
			<property name="datanucleus.NontransactionalWrite" value="true" />
			<property name="datanucleus.ConnectionURL" value="appengine" />
		</properties>
	</persistence-unit>
</persistence>

【问题讨论】:

  • 你可以试试} catch (Exception e) { e.printStackTrace( out ); } - 也许有嵌套异常?
  • javax.persistence.PersistenceException:在尝试以下发现的实现后,“事务可选”发生显式持久性提供程序错误:来自提供程序的 org.datanucleus.api.jpa.PersistenceProviderImpl:org.datanucleus .api.jpa.PersistenceProviderImpl
  • 引起:org.datanucleus.metadata.InvalidClassMetaDataException:类 s.follows 具有应用程序标识,但未指定 objectid-class 具有 0 个主键字段。无法使用 SingleFieldIdentity。
  • @Kenney 我在包 s 中的项目中有课程跟随
  • 谢谢 - 用堆栈跟踪更新问题没关系(甚至更好)。根据this,当您使用 ApplicationIdentity 时,您需要定义一个主键。你能用s.follows 类更新问题吗?

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


【解决方案1】:

正如您在评论中发布的例外 (!) 所说的

org.datanucleus.metadata.InvalidClassMetaDataException: Class s.follows has application-identity and no objectid-class specified yet has 0 primary key fields. Unable to use SingleFieldIdentity. 

然而你没有发布这个课程(为什么?!你不认为人们可能想看到它,当它是例外的时候?)。

解决方案:将字段标记为 @Id,就像所有 JPA 文档所说的那样。

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 2013-06-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2014-05-20
    相关资源
    最近更新 更多