Java 即使提供了正确的提供程序,也会出现有关PersistenceProvider的Hibernate警告
当我尝试将Hibernate与本地Derby数据库一起使用时,我总是收到关于错误持久性提供程序的三次警告: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]
[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;
}