Версия Hibernate для поддержки Oracle12cDialect и JPA 2.0 - PullRequest
0 голосов
/ 28 февраля 2019

Я развертываю свое приложение (Spring + Hibernate + JPA) на сервере приложений Websphere, и приложение подключается к версии базы данных Oracle 12c.

Для поддержки БД Oracle 12c мне нужен сервер приложений Oracle12c Dialect и Websphere (8.5.5) поддерживает JPA 2.0.

Я вижу, что версии Hibernate> 5 предоставляют только Oracle12cDialect и не предоставляют JPA 2.0, вместо этого он имеет (hibernate-jpa-2.1-api-1.0.0.Final.jar)

JPA 2.0 поддерживается V3.5 до V4.2 (но эти версии недоступны с Oracle12cDialect)

Когда я использую hibernate-entitymanager.5.0.7.Final.jar, я получаю приведенную ниже ошибку во время вызова службы.

Ошибка:

Caused by: java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider
                at javax.persistence.Persistence$1.isLoaded(Persistence.java:110) ~[hibernate-jpa-2.1-api-1.0.0.Final.jar:1.0.0.Final]
                at org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:57) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final]
                at org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:130) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final]
                at org.hibernate.validator.internal.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:46) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final]
                at org.hibernate.validator.internal.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:1221) ~[hibernate-validator-4.3.0.Final.jar:4.3.0.Final

Если я попытаюсь сохранить область действия hibernate-jpa-2.1-api-1.0.0.Final.jar, предоставленную приложением, это создаст следующую проблему, поскольку класс AttributeConverter недоступен в Websphere JPA 2.0

ERROR o.s.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax.persistence.AttributeConverter
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) ~[spring-beans-3.1.3.RELEASE.jar:3.1.3.RELEASE]
Caused by: java.lang.NoClassDefFoundError: javax.persistence.AttributeConverter
                at org.hibernate.boot.internal.MetadataBuilderImpl.<init>(MetadataBuilderImpl.java:127) ~[hibernate-core-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.boot.MetadataSources.getMetadataBuilder(MetadataSources.java:135) ~[hibernate-core-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:185) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:160) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:50) ~[hibernate-entitymanager-5.0.7.Final.jar:5.0.7.Final]
                at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:287) ~[spring-orm-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) ~[spring-orm-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) ~[spring-beans-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) ~[spring-beans-3.1.3.RELEASE.jar:3.1.3.RELEASE]
                ... 69 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.persistence.AttributeConverter
                at java.net.URLClassLoader.findClass(URLClassLoader.java:600) ~[na:1.7.0]
                at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:240) ~[bootstrap.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:941) ~[na:1.7.0]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:876) ~[na:1.7.0]
                at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:133) ~[bootstrap.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:846) ~[na:1.7.0]
                at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:617) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:846) ~[na:1.7.0]
                at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:617) ~[com.ibm.ws.runtime.jar:WAS855.SERV1 [cf051507.01]]
                at java.lang.ClassLoader.loadClass(ClassLoader.java:846) ~[na:1.7.0]
                ... 81 common frames omitted

Если я использую версию Hibernate для поддержки JPA 2.0, то мне нужно использовать только Oracle10gDialect.

Любая идея, пожалуйста, от участников hibernate и webSphere?

1 Ответ

0 голосов
/ 01 марта 2019

Нет решения для этой проблемы, вы можете только:

  • Обновите вашу Websphere версию до WAS 9.0 (конечно, это простая задача :))
  • Продолжать использоватьOracle10gDialect, который, кроме деталей, относящихся к версии (но я никогда не сталкивался с какой-либо проблемой при простом JPA использовании), прекрасно работает с Oracle 12.

PS Существует IBM примечание о включении JPA 2.1 на WAS 8.5.5, но, честно говоря, усилия не окупаются (больше не нужно управлять сохранением контейнеров? Нет, спасибо).

...