Java 错误:EntityManager没有持久性提供程序
StackOverflow上已经有很多关于此错误消息的问题,但我找不到解决方案 错误是: 严重:映射到响应的异常:500内部服务器错误 javax.persistence.PersistenceException:没有名为CreateJPA的EntityManager的持久性提供程序 位于javax.persistence.persistence.createEntityManagerFactoryPersistence.java:84 位于org.odata4j.producer.jpa.JPAProducerFactory.createJPAProducerFactory.java:32 位于org.odata4j.producer.resources.DefaultODataProducerProvider.newProducerFromFactoryDefaultODataProducerProvider.java:113 在 我的persistence.xml是:Java 错误:EntityManager没有持久性提供程序,java,tomcat,jpa,persistence.xml,odata4j,Java,Tomcat,Jpa,Persistence.xml,Odata4j,StackOverflow上已经有很多关于此错误消息的问题,但我找不到解决方案 错误是: 严重:映射到响应的异常:500内部服务器错误 javax.persistence.PersistenceException:没有名为CreateJPA的EntityManager的持久性提供程序 位于javax.persistence.persistence.createEntityManagerFactoryPersistence.java:84 位于org.odata4j.producer.jpa.JP
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="createJPA" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>model.Cumulative</class>
<class>model.Date</class>
<class>model.Department</class>
<class>model.Holiday</class>
<class>model.Log</class>
<class>model.Member</class>
<class>model.Person</class>
<class>model.Project</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/resource_db"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax. persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value=""/>
</properties>
</persistence-unit>
</persistence>
My persistence.xml位于项目浏览器的JPA内容下:
我的pom.xml也可以查看:
CreateEntityManagerFactory是:
public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
EntityManagerFactory emf = null;
PersistenceProviderResolver resolver = PersistenceProviderResolverHolder.getPersistenceProviderResolver();
List<PersistenceProvider> providers = resolver.getPersistenceProviders();
for (PersistenceProvider provider : providers) {
emf = provider.createEntityManagerFactory(persistenceUnitName, properties);
if (emf != null) {
break;
}
}
if (emf == null) {
throw new PersistenceException("No Persistence provider for EntityManager named " + persistenceUnitName);
}
return emf;
}
对于标准JavaSE应用程序,请将META-INF\persistence.xml放在src文件夹的根目录中 如果您使用的是JEE容器管理实体管理器,那么一定要使用JTA作为事务类型,而不是RESOURCE_LOCAL。然后确保WebContent->META-INF包含persistence.xml e、 g
我想你应该在META-INF文件夹中有persistence.xml。我只是快速尝试了一下-错误没有改变。你能显示你的pom.xml吗?添加。我在添加代码时遇到了问题——我把它放在这里:当声明EntityManager时,properties变量做什么?你试过不用它们吗?另一方面,在我的实验中,我没有在persistence.xml文件中指定none标记,一切都很好。
public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
EntityManagerFactory emf = null;
PersistenceProviderResolver resolver = PersistenceProviderResolverHolder.getPersistenceProviderResolver();
List<PersistenceProvider> providers = resolver.getPersistenceProviders();
for (PersistenceProvider provider : providers) {
emf = provider.createEntityManagerFactory(persistenceUnitName, properties);
if (emf != null) {
break;
}
}
if (emf == null) {
throw new PersistenceException("No Persistence provider for EntityManager named " + persistenceUnitName);
}
return emf;
}
package org.odata4j.producer.jpa;
import java.util.Properties;
import java.util.logging.Logger;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.odata4j.producer.ODataProducer;
import org.odata4j.producer.ODataProducerFactory;
public class JPAProducerFactory implements ODataProducerFactory {
private final Logger log = Logger.getLogger(getClass().getName());
public static final String PUNAME_PROPNAME = "odata4j.jpa.persistenceUnitName";
public static final String NAMESPACE_PROPNAME = "odata4j.jpa.edmNamespace";
public static final String MAX_RESULTS_PROPNAME = "odata4j.jpa.maxResults";
@Override
public ODataProducer create(Properties properties) {
String persistenceUnitName = properties.getProperty(PUNAME_PROPNAME);
if (persistenceUnitName == null || persistenceUnitName.length() == 0)
throw new RuntimeException("Missing required property: " + PUNAME_PROPNAME);
String edmNamespace = properties.getProperty(NAMESPACE_PROPNAME, "");
String maxResults = properties.getProperty(MAX_RESULTS_PROPNAME, "50");
log.info(String.format("Using persistence unit [%s] with edm namespace [%s] and max results [%s]", persistenceUnitName, edmNamespace, maxResults));
log.info("Persistence name is:" + persistenceUnitName);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("createJPA");
JPAProducer producer = new JPAProducer(emf, edmNamespace, Integer.parseInt(maxResults));
return producer;
}
}
<persistence-unit name="createJPA" transaction-type="JTA">
<jta-data-source>jdbc/MyDatasource</jta-data-source>
</persistence-unit>