java.lang.NoSuchMethodError:javax.persistence.EntityManager.setProperty(Ljava / lang / String; Ljava / lang / Ob ject;)V

用户名

在heroku上部署我的play 1.2.5应用程序时出现此错误。

2014-06-30T21:47:45.786454+00:00 app[web.1]: 21:47:45,786 ERROR ~
2014-06-30T21:47:45.786461+00:00 app[web.1]:
2014-06-30T21:47:45.786464+00:00 app[web.1]: @6ilc03hfb
2014-06-30T21:47:45.786466+00:00 app[web.1]: Internal Server Error (500) for req
uest GET /
2014-06-30T21:47:45.786468+00:00 app[web.1]:
2014-06-30T21:47:45.786469+00:00 app[web.1]: Oops: NoSuchMethodError
2014-06-30T21:47:45.786471+00:00 app[web.1]: An unexpected error occured caused
by exception NoSuchMethodError: javax.persistence.EntityManager.setProperty(Ljav
a/lang/String;Ljava/lang/Object;)V
2014-06-30T21:47:45.786473+00:00 app[web.1]:
2014-06-30T21:47:45.786474+00:00 app[web.1]: play.exceptions.UnexpectedException
: Unexpected Error
2014-06-30T21:47:45.786476+00:00 app[web.1]:    at play.Invoker$Invocation.onExc
eption(Invoker.java:244)
2014-06-30T21:47:45.786477+00:00 app[web.1]:    at play.Invoker$Invocation.run(I
nvoker.java:286)
2014-06-30T21:47:45.786479+00:00 app[web.1]:    at Invocation.HTTP Request(Play!
)
2014-06-30T21:47:45.786481+00:00 app[web.1]: Caused by: java.lang.NoSuchMethodEr
ror: javax.persistence.EntityManager.setProperty(Ljava/lang/String;Ljava/lang/Ob
ject;)V
2014-06-30T21:47:45.786483+00:00 app[web.1]:    at play.db.jpa.JPAPlugin.startTx
(JPAPlugin.java:375)
2014-06-30T21:47:45.786484+00:00 app[web.1]:    at play.db.jpa.JPAPlugin.beforeI
nvocation(JPAPlugin.java:345)
2014-06-30T21:47:45.786486+00:00 app[web.1]:    at play.plugins.PluginCollection
.beforeInvocation(PluginCollection.java:473)
2014-06-30T21:47:45.786487+00:00 app[web.1]:    at play.Invoker$Invocation.befor
e(Invoker.java:217)
2014-06-30T21:47:45.786488+00:00 app[web.1]:    at play.Invoker$Invocation.run(I
nvoker.java:277)
2014-06-30T21:47:45.786490+00:00 app[web.1]:    ... 1 more

应用程序使用带postgis扩展名的postgres db。谁能帮我解决这个错误?

艾尔文

只是为了让尼尔·斯托克顿的答案更清晰一些:

  1. API-您要针对其进行编程的JAR集。这在您的开发类路径中。通常,API是Java接口或抽象类或委托。如果使用的是Eclipse,则这是“构建路径”中的内容。在Maven中,这是您在POM中声明的依赖项。

  2. 实现-捆绑在服务器中的一组JAR,或更具体地说,捆绑在JPA容器中。这些是您在代码中调用的API的实现。这些不在您的开发类路径中,它们是服务器的类路径或库的一部分。JPA容器(同样是服务器安装的一部分)在运行时将它们用作代码中的接口委托执行的实际类。

使用API​​-实现兼容性的其他技术包括Servlet API-Web容器,EJB API-EJB容器。

如Neil所述,您的CODE(开发类路径)使用JPA 2,但服务器类路径上仅具有JPA 1。

要解决此问题,您需要参考服务器的文档,以了解如何下载支持JPA 2.0的服务器版本。某些服务器允许您更新库,因此JPA 1会更新为JPA 2.0。

如果这是不可能的(即供应商服务器),那么令人遗憾的是,您必须更改代码以仅使用JPA 1兼容的API,这意味着您必须删除对EntityManager.setProperty的调用,并尝试以其他方式实现它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章