![](/img/trans.png)
[英]Spring 4.3.1 + Hibernate 5.2.1 creating SessionFactoryImplementor.getProperties noSuchMethod exception
[英]Hibernate 5.4.15.final missing SessionFactoryImplementor.getProperties() method
我正在使用 hibernate 5.4.15.fianl 版本連接到 DB2 數據庫。 創建 SessionFactory 時出現以下錯誤:
*Exception in thread "main" java.lang.NoSuchMethodError: org/hibernate/engine/spi/SessionFactoryImplementor.getProperties()Ljava/util/Map;
at org.hibernate.engine.query.spi.QueryPlanCache.<init>(QueryPlanCache.java:85)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:259)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
使用 Configuration class object 來配置屬性,
Configuration config = new Configuration();
config.setProperty("hibernate.connection.driver_class", "com.ibm.db2.jcc.DB2Driver");
config.setProperty("hibernate.connection.url", url);
config.setProperty("hibernate.connection.sslConnection", "true");`enter code here`
String fmtHomeDir = FMTEnvironment.getFMT_HOME_DIR();
String certPath= fmtHomeDir + File.separator + "security" +File.separator +"TGenClientTrust2.jks";
config.setProperty("hibernate.connection.sslTrustStoreLocation",certPath);
config.setProperty("hibernate.connection.sslTrustStorePassword", ****);
config.setProperty("hibernate.connection.username", username);
config.setProperty("hibernate.connection.password", password);
config.setProperty("hibernate.dialect", "org.hibernate.dialect.DB2Dialect");
//optional to fix cmd issue
config.setProperty("hibernate.connection.characterEncoding", "UTF-8");
config.setProperty("hibernate.current_session_context_class", "thread");
// end-cmd issue
config.setProperty(Environment.SHOW_SQL, String.valueOf(false));
// login property
config.setProperty("log4j.logger.org.hibernate.SQL", "info");
config.setProperty("log4j.logger.org.hibernate.type", "trace");
// adding entity annotations
config.addClass(Categories.class);
config.addClass(Functions.class);
我嘗試了在 web 上找到的所有可能組合以獲得 sessionfactory object,1. 從上面的配置 object:
Configuration config = legacyBootStraping();
sessionFactory = config.buildSessionFactory();
BootstrapServiceRegistryBuilder bootstrapRegistryBuilder = new BootstrapServiceRegistryBuilder();
bootstrapRegistryBuilder.applyClassLoader( ClassLoader.getSystemClassLoader() );
BootstrapServiceRegistry bootstrapRegistry = bootstrapRegistryBuilder.build();
StandardServiceRegistryBuilder standardRegistryBuilder = new StandardServiceRegistryBuilder(
bootstrapRegistry );
standardRegistryBuilder.applySettings(getSettings());
StandardServiceRegistry standardRegistry =standardRegistryBuilder.build();
MetadataSources sources = new MetadataSources( standardRegistry );
sources = getConfigMetadata(sources);
MetadataBuilder metadataBuilder = sources.getMetadataBuilder();
Metadata metadata = metadataBuilder.build()
sessionFactory = metadata.getSessionFactoryBuilder().build();
Configuration config = getLegacyBootStrapConfig(); // get the above configuration
StandardServiceRegistryBuilder stdServBuilder = new StandardServiceRegistryBuilder();
ServiceRegistry serviceRegistry = stdServBuilder.applySettings(config.getProperties()).build();
sessionFactory = config.buildSessionFactory(serviceRegistry);
每個調用直接/間接到達 hibernate class: SessionFactoryImpl constructor line:259 --> this.queryPlanCache = new QueryPlanCache( this ); QueryPlanCache --> 調用 SessionFactoryImplementor class 方法 getProperties()
getProperties() 方法不屬於此 class 並獲得異常:org/hibernate/engine/spi/SessionFactoryImplementor.getProperties()Ljava/util/Map;
早期的反應真的很感激。 我已經嘗試過這里提到的大多數帖子,比如清理以前編譯的代碼,嘗試刪除一些持久性 class 版本等,但對我來說沒有任何鍛煉。
我能夠解決這個問題。 在我的工作環境中。 class 加載程序加載了更多 jar 文件。 加載順序存在沖突。 我找到了先加載 hibernate lib 然后是 rest 的修復程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.