![](/img/trans.png)
[英]Why I'm getting a “No Persistence provider for EntityManager” when updated to version 5.0?
[英]why getting “No Persistence provider for EntityManager” when running with jnlp while standalone jar works fine
环境Win 8.1 MySQL服务器:localhost Netbeans 7.4 Java:1.7.0_51(J2SE)JRE:1.7.0_51-b31 EclipseLink(JPA 2.1)
有几篇帖子问这个“没有为EntityManager命名的持久性提供程序……”错误。 我正在使用J2SE(不是J2EE)进行开发。 但是,我的问题似乎很愚蠢,但确实困扰了我两天。 我是否需要其他软件才能使该独立程序正常工作? 但是,当我在Netbeans IDE下运行该程序时,为什么它会像橡木一样呢? 我是否尝试过某种环境设置问题?
工作快照和EclipseLink消息!
我使用Netbeans编写代码,并且运行正常。 现在,我决定将整个独立程序包复制到“ D:\\ NetBeansWork \\ ProjCostTracking \\ dist”中。 我在Java控制面板中将安全设置更改为中。 然后,我双击ProjCostTracking.jnlp启动。 好吧,这就是我所看到的。
这是我的persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="ProjCostTrackingPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>ProjCostTracking.EntityUserlevel</class>
<class>ProjCostTracking.EntityUser</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/biotechcost?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
</properties>
</persistence-unit>
</persistence>
实体文件是
生成的文件和lib
至于persistence.xml,我复制到3个地方只是为了确保可以“看到”它。
至于CLASSPATH,我将所需的jar文件(来自ProjCostTracking \\ dist \\ lib)复制到了默认JDK和JRE下的lib文件夹中。 因此,java应该看到这些罐子。
通常这是连接器问题。 看来eclipse没有使用正确的连接器。 检查连接器版本。 它应该与您的MySQL数据库版本匹配。
我想我以错误的方式使用了JNLP。 因为当我使用“ java -jar myprogram.jar”运行独立版本时,它可以完美运行,没有错误。 但是,当我使用jnlp时,它给了我错误。 希望我不会在这里误导大家。 它与jnlp与持久性工具如何工作有关。
问题是,如果要使用应用程序管理的实体管理器,则必须控制驱动程序和使用的API的范围。
例如:在Java SE Application中,您可以使用maven构建项目。 依赖项的范围表示何时必须使用API或程序包。 例如
(...)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.1.Final</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.1.Final</version>
<scope>runtime</scope>
</dependency>
(...)
因为生命周期是由应用程序而不是容器管理的(例如在Java EE应用程序中)。 就我而言,将范围从provided
的范围更改为runtime
(与数据库驱动程序相同)很重要。 就您而言-如果您不使用Maven,则取决于JVM使用什么。
也许这是有帮助的。 我知道这类问题,确实很烦人:|
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.