程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了java.lang.NoSuchMethodError:org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava / util / Properties大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决java.lang.NoSuchMethodError:org.hibernate.ENGIne.spi.SessionFactoryImplementor.getProperties()Ljava / util / Properties?

开发过程中遇到java.lang.NoSuchMethodError:org.hibernate.ENGIne.spi.SessionFactoryImplementor.getProperties()Ljava / util / Properties的问题如何解决?下面主要结合日常开发的经验,给出你关于java.lang.NoSuchMethodError:org.hibernate.ENGIne.spi.SessionFactoryImplementor.getProperties()Ljava / util / Properties的解决方法建议,希望对你解决java.lang.NoSuchMethodError:org.hibernate.ENGIne.spi.SessionFactoryImplementor.getProperties()Ljava / util / Properties有所启发或帮助;

根据Neil提供的链接,我能够找到一种创建和使用setJpaPropertymap()来设置属性Map的方法。然后,它给了我一个不同的错误LoadTimeweavers,我用

@Bean
    public instrumentationLoadTimeweaver loadTimeweaver()  throws Exception {
        instrumentationLoadTimeweaver loadTimeweaver = new instrumentationLoadTimeweaver();
        return loadTimeweaver;
    }

解决。然后这给了我错误消息

java.lang.IllegalStateException: Must start with Java agent to use instrumentationLoadTimeweaver. See Spring documentation.

为此,我使用了此链接http://gradle.1045684.n5.nabble.com/Java-Agent-LTW-problem-with- Gradle-and-jetty-td4938600.HTML,因为这是一个解决方案,只是更改了版本到当前的Spring工具版本。我相信您会发现这并不是解决所有问题所需的重复步骤。

解决方法

@H_607_23@
@Configuration
@EnabletransactionManagement
public class DatasourceConfig {

    @Bean(destroymethod = "shutdown")
    public Datasource datasource(){
        EmbeddedDatabaseBuilder databaseBuilder = new EmbeddedDatabaseBuilder();
        databaseBuilder.setType(EmbeddedDatabaseType.H2);
        databaseBuilder.addScript("classpath:db/migration/V1__Create_Books_Table.sql");
        databaseBuilder.addScript("classpath:db/migration/V2__Add_Books.sql");
        return databaseBuilder.build();
    }

    @Bean
    public JpaVendorAdapter vendorAdapter(){

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);
        vendorAdapter.setDatabase(Database.H2);
        vendorAdapter.setShowSql(true);
        vendorAdapter.setDatabasePlatform("org.hibernate.dialect.H2Dialect");
        return vendorAdapter;
    }

    @Bean(name = "entitymanagerFactory")
    public EntitymanagerFactory managerFactory(){
    Properties jpaProperties = new Properties();
    jpaProperties.put("hibernate.hbm2ddl.auto","create-drop");

    LocalContainerEntitymanagerFactoryBean managerFactoryBean = new LocalContainerEntitymanagerFactoryBean();
    managerFactoryBean.setDatasource(datasource());
    managerFactoryBean.setJpaVendorAdapter(vendorAdapter());
    managerFactoryBean.setPackagesToScan("com.sAMMy");
    managerFactoryBean.setJpaProperties(jpaProperties);
    managerFactoryBean.afterPropertiesSet();
    return managerFactoryBean.getObject();
}

    @Bean
    public PlatformtransactionManager transactionManager(){
        JpatransactionManager transactionManager = new JpatransactionManager();
        transactionManager.setEntitymanagerFactory(managerFactory());
        return transactionManager;
    }
}

那是我的配置类,我的gradle构建文件是

buildscript {

    repositories {
        jcenter()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "org.sonarsource.scAnner.gradle:sonarqube-gradle-plugin:${sonarVersion}"
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
    }
}

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'org.sonarqube'
apply plugin: 'org.springframework.boot'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

jar{
    group 'com.sAMMy'
    version '1.0-SNAPSHOT'
}

dependencies {

    TESTCompile "junit:junit:${junitVersion}"
    TESTCompile "info.cukes:cucumber-java:${CucumberVersion}"
    TESTCompile "info.cukes:cucumber-junit:${CucumberVersion}"
    //TESTCompile "info.cukes:cucumber-spring:${CucumberVersion}"
    TESTCompile 'org.springframework.boot:spring-boot-starter-test'

    compile 'com.h2database:h2'
    compile "org.flywaydb:flyway-core:${flywayVersion}"
    compile "org.projectlombok:lombok:${lombokVersion}"
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }

    compile "org.hibernate:hibernate-core:${hibernateVersion}"
    compile 'org.springframework.boot:spring-boot-starter-aop'
    compile 'org.springframework.boot:spring-boot-starter-jetty'
    compile "io.springfox:springfox-swagger2:${swaggerVersion}"
    compile "org.jadira.usertype:usertype.core:${jadiraVersion}"
    compile "io.springfox:springfox-swagger-ui:${swaggerVersion}"
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.cloud:spring-cloud-starter-config'
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    //compile 'org.springframework.boot:spring-boot-starter-data-mongodb'
}

task wrapper(type :Wrapper){
    gradleVersion = '3.4.1'
}

然我的gradle属性文件是

junitVersion = 4.12
sonarVersion = 2.2.1
flywayVersion = 4.1.2
swaggerVersion = 2.6.1
cucumberVersion = 1.2.5
lombokVersion = 1.16.14
jadiraVersion = 6.0.1.GA
hibernateVersion = 5.2.9.Final
springBootVersion = 1.5.2.RELEASE

这个问题是,我想在我的实体类中使用Java 8的LocalDate,但是如果不抛出以下错误消息,这仍然无法正常工作:

org.springframework.beans.factory.beanCreationException: Error creaTing bean with name 'entitymanagerFactory' defined in class path resource [com/sAMMy/config/DatasourceConfig.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.ENGIne.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at com.sAMMy.SpringDataTutorials.main(SpringDataTutorials.java:18) [main/:na]
Caused by: java.lang.NoSuchMethodError: org.hibernate.ENGIne.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties;
    at org.hibernate.jpa.internal.EntitymanagerFactoryImpl.<init>(EntitymanagerFactoryImpl.java:124) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.boot.internal.EntitymanagerFactoryBuilderImpl.build(EntitymanagerFactoryBuilderImpl.java:890) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntitymanagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntitymanagerFactoryBean.createNativeEntitymanagerFactory(LocalContainerEntitymanagerFactoryBean.java:353) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.orm.jpa.AbstractEntitymanagerFactoryBean.buildNativeEntitymanagerFactory(AbstractEntitymanagerFactoryBean.java:370) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.orm.jpa.AbstractEntitymanagerFactoryBean.afterPropertiesSet(AbstractEntitymanagerFactoryBean.java:359) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    ... 16 common frames omitted

不管我将jadira core还是spi库添加到gradle构建文件中,我仍然会遇到相同的错误。SpringBoot spring- orm-4.3.7.RELEASE按原样在stacktrace中使用,然后添加hibernate核心版本5.2.9.FINAL将其升级到该版本。我研究了这里提到的几乎所有不同的问题,但没有涉及此版本。我还阅读了hibernate的当前版本文档,该文档说它应该可以工作,但是对我来说不是,所以不确定为什么。

INFO 26648 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found。我将JpatransactionManager更改为使用注入的entitymanagerFactory作为建议的答案之一,但即使在使用gradle和intellij重建项目后,它仍然无法正常工作。我查看了Hibernate
5.2.9.FINAL文档,该方法getProperties()不再存在,但继承自entitiymanagerFactory。另外,大多数答案都是在xml
config中完成的,而不是在Java上完成的,因为我没有找到答案,没有一个答案描述了如何在java
config情况下将其更改为映射,而不是使用属性。当我将hibiernates版本降至5.1.x时,该错误消息消失了,但是显示的Java 8
LocalDate类型错误消息是因为该版本的hibernate中不支持Java功能。

大佬总结

以上是大佬教程为你收集整理的java.lang.NoSuchMethodError:org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava / util / Properties全部内容,希望文章能够帮你解决java.lang.NoSuchMethodError:org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava / util / Properties所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。