Java Hibernate-没有名为的EntityManager的存在提供程序*

Java Hibernate-没有名为的EntityManager的存在提供程序*,java,mysql,hibernate,ubuntu,tomcat,Java,Mysql,Hibernate,Ubuntu,Tomcat,在互联网上浏览并尝试各种解决方案后,我来到这里寻求帮助 我有一个java项目,它在Mac上(部署在本地tomcat上)本地运行得非常好,但是当我尝试在Ubuntu服务器上部署相同的war时,请求抛出500,并带有以下跟踪: javax.servlet.ServletException: javax.persistence.PersistenceException: No Persistence provider for EntityManager named PERSISTENCE: Provi

在互联网上浏览并尝试各种解决方案后,我来到这里寻求帮助

我有一个java项目,它在Mac上(部署在本地tomcat上)本地运行得非常好,但是当我尝试在Ubuntu服务器上部署相同的war时,请求抛出500,并带有以下跟踪:

javax.servlet.ServletException: javax.persistence.PersistenceException: No Persistence provider for EntityManager named PERSISTENCE: Provider named org.hibernate.jpa.HibernatePersistenceProvider threw unexpected exception at create EntityManagerFactory: 
java.lang.NoSuchMethodError
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1236)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:833)
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:250)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:231)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:274)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:904)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
    at com.frusoft.schedulemanager.databaseaccess.BaseDao.<init>(BaseDao.java:25)
    at com.frusoft.schedulemanager.databaseaccess.ClientDao.<init>(ClientDao.java:11)
这就是我实例化EntityManagerFactory的方式

if (emf == null)
            emf = Persistence.createEntityManagerFactory("PERSISTENCE");

任何形式的帮助都将不胜感激

您必须告诉
JPA
您使用的是哪家JPA提供商

org.hibernate.jpa.HibernatePersistenceProvider
添加到
peristence.xml
中的
peristenceUnit

<persistence-unit name="PERSISTENCE" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

    <properties>
        ...
    </properties>
</persistence-unit>

org.hibernate.jpa.HibernatePersistenceProvider
...
问题在于

    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version>
    </dependency>

javax.persistence
持久性api
1.0.2
正在被hibernate覆盖。 我需要删除依赖项或设置与hibernate 5.x兼容的较新依赖项

    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>

javax.persistence
javax.persistence-api
2.2
在执行
mvn安装之前,我还需要抛出
mvn clean
命令,以生成.war,从而不再缓存依赖项

----------注---------


我仍然不清楚为什么这在我的本地机器(我在那里开发了这个后端)上能正常工作。

看看这是否能帮助你:就是这样!我记得我以前试过,但没有成功。问题是,我需要在安装mvn之前执行mvn清理!在显式添加提供程序之后(尽管不需要),它仍然显示完全相同的错误。不过,这只发生在我拥有的Ubuntu VPS上,在本地运行很好!
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>