环境 赢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)进行开发。然而,我的问题似乎很愚蠢,但它确实困扰了我2天。是否需要其他软件才能使这个独立程序工作?但是当我在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假设看到了罐子。
答案 0 :(得分:0)
通常这是连接器问题。 似乎eclipse没有使用正确的连接器。检查连接器版本。它应该与MySQL数据库的版本匹配。
答案 1 :(得分:0)
我想我正在以错误的方式使用JNLP。因为当我使用“java -jar myprogram.jar”运行独立时,它运行正常,没有错误。但是,当我使用jnlp时,它给了我错误。希望我不会误导所有人。它与jnlp如何与持久性函数相关联更为相关。
答案 2 :(得分:0)
问题是,如果要使用应用程序管理实体管理器,则必须控制驱动程序的范围并使用API。
例如:在Java SE Application中,您可以使用maven构建项目。当必须使用API或包时,依赖关系的范围发出信号。 E.g。
(...)
<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正在使用的内容。
也许这很有帮助。我知道这种问题而且非常烦人:|