Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使提供了正确的提供程序,也会出现有关PersistenceProvider的Hibernate警告_Java_Hibernate_Maven_Jpa - Fatal编程技术网

Java 即使提供了正确的提供程序,也会出现有关PersistenceProvider的Hibernate警告

Java 即使提供了正确的提供程序,也会出现有关PersistenceProvider的Hibernate警告,java,hibernate,maven,jpa,Java,Hibernate,Maven,Jpa,当我尝试将Hibernate与本地Derby数据库一起使用时,我总是收到关于错误持久性提供程序的三次警告: [WARN] HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. [WARN]

当我尝试将Hibernate与本地Derby数据库一起使用时,我总是收到关于错误持久性提供程序的三次警告:

[WARN] HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
[WARN] HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
[WARN] HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
我找不到任何原因,因为我的persistence.xml(项目中唯一的persistence.xml)如下所示:

<persistence 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"
    version="2.0">
    <persistence-unit name="performanzdb" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>...</class>
        <properties>
            <property name="hibernate.connection.url" value="myUrl;create=true" />
            <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>
除了开头的警告和错误之外:

[ERROR] HHH015011: Unable to locate static metamodel field : package.class_#field
Hibernate不时出现在新定义的字段中,运行良好,所有内容都按其应有的方式写入数据库


是否有人知道为什么使用了错误的
PersistenceProvider
,或者为什么会发生此错误?

已报告类似问题,请查看

从以上链接中,

This bug also affects version 4.3.7.Final.

有了一个新的基于maven的Spring引导项目,包括JPA依赖项,当slf4j级别为INFO时,我仍然可以看到这些警告日志行

14:04:47.990 [main] WARN o.hibernate.ejb.HibernatePersistence - HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. 14:04:47.990 [main] WARN o.hibernate.ejb.HibernatePersistence - HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. 14:04:47.990 [main] WARN o.hibernate.ejb.HibernatePersistence - HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. 14:04:47.990[main]WARN o.hibernate.ejb.HibernatePersistence-HHH015016:遇到不推荐的javax.persistence.spi.PersistenceProvider[org.hibernate.ejb.HibernatePersistence];改用[org.hibernate.jpa.HibernatePersistenceProvider]。 14:04:47.990[main]WARN o.hibernate.ejb.HibernatePersistence-HHH015016:遇到不推荐的javax.persistence.spi.PersistenceProvider[org.hibernate.ejb.HibernatePersistence];改用[org.hibernate.jpa.HibernatePersistenceProvider]。 14:04:47.990[main]WARN o.hibernate.ejb.HibernatePersistence-HHH015016:遇到不推荐的javax.persistence.spi.PersistenceProvider[org.hibernate.ejb.HibernatePersistence];改用[org.hibernate.jpa.HibernatePersistenceProvider]。 我找到了此解决方案,并在创建实体管理器工厂之前添加了一段代码:

public EntityManager create() {
    if (AbstractBaseForJUnit.EMF == null) {
        PersistenceProviderResolverHolder.setPersistenceProviderResolver(new PersistenceProviderResolver() {
            private final List<PersistenceProvider> providers_ = Arrays.asList((PersistenceProvider) new HibernatePersistenceProvider());

            @Override
            public void clearCachedProviders() {
                // TODO Auto-generated method stub
            }

            @Override
            public List<PersistenceProvider> getPersistenceProviders() { 
                return providers_; 
            }
        });

        if (StringUtils.isBlank(AbstractBaseForJUnit.PU_NAME)) {
            AbstractBaseForJUnit.PU_NAME = CoreProperties.Features.PERSISTENCE_UNIT_NAME;
        }
        AbstractBaseForJUnit.EMF = Persistence.createEntityManagerFactory(AbstractBaseForJUnit.PU_NAME);
    }

    if (this.EM == null) {
        this.EM = AbstractBaseForJUnit.EMF.createEntityManager();
        this.EM.setFlushMode(FlushModeType.COMMIT);
    }

    return EM;
}
public EntityManager create(){
if(AbstractBaseForJUnit.EMF==null){
PersistenceProviderResolver.setPersistenceProviderResolver(新的PersistenceProviderResolver()){
私有最终列表提供程序=array.asList((PersistenceProvider)新的HibernatePersistenceProvider());
@凌驾
public void clearCachedProviders(){
//TODO自动生成的方法存根
}
@凌驾
公共列表getPersistenceProviders(){
退货供应商;
}
});
if(StringUtils.isBlank(AbstractBaseForJUnit.PU_NAME)){
AbstractBaseForJUnit.PU_NAME=CoreProperties.Features.PERSISTENCE_单元名称;
}
AbstractBaseForJUnit.EMF=Persistence.createEntityManagerFactory(AbstractBaseForJUnit.PU_名称);
}
if(this.EM==null){
this.EM=AbstractBaseForJUnit.EMF.createEntityManager();
this.EM.setFlushMode(FlushModeType.COMMIT);
}
返回EM;
}
还更改了我的persistence.xml

org.hibernate.jpa.HibernatePersistenceProvider


现在不再显示警告。

请看一看,谢谢,通过在
PersistenceProviderResolverHolder
中设置持久性提供程序,警告不再显示。因此,静态元模型字段出现错误是因为,并且与持久性提供程序无关?是的,不太清楚,只是发布了一个带有类似链接的答案,供您接受/投票。
public EntityManager create() {
    if (AbstractBaseForJUnit.EMF == null) {
        PersistenceProviderResolverHolder.setPersistenceProviderResolver(new PersistenceProviderResolver() {
            private final List<PersistenceProvider> providers_ = Arrays.asList((PersistenceProvider) new HibernatePersistenceProvider());

            @Override
            public void clearCachedProviders() {
                // TODO Auto-generated method stub
            }

            @Override
            public List<PersistenceProvider> getPersistenceProviders() { 
                return providers_; 
            }
        });

        if (StringUtils.isBlank(AbstractBaseForJUnit.PU_NAME)) {
            AbstractBaseForJUnit.PU_NAME = CoreProperties.Features.PERSISTENCE_UNIT_NAME;
        }
        AbstractBaseForJUnit.EMF = Persistence.createEntityManagerFactory(AbstractBaseForJUnit.PU_NAME);
    }

    if (this.EM == null) {
        this.EM = AbstractBaseForJUnit.EMF.createEntityManager();
        this.EM.setFlushMode(FlushModeType.COMMIT);
    }

    return EM;
}