Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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 Spring/JPA/Hibernate可以使用简单的JDBC兼容驱动程序吗?_Java_Spring_Hibernate_Jdbc_Entitymanager - Fatal编程技术网

Java Spring/JPA/Hibernate可以使用简单的JDBC兼容驱动程序吗?

Java Spring/JPA/Hibernate可以使用简单的JDBC兼容驱动程序吗?,java,spring,hibernate,jdbc,entitymanager,Java,Spring,Hibernate,Jdbc,Entitymanager,我们有一个应用程序,它在服务器上使用Spring容器,使用EJB3实体和Hibernate将数据持久化到PostgreSQL数据库中 我想使用单独的EntityManager向单独的数据库添加另一个连接,但是DBMS(Trifox Vortex)的供应商没有数据源类型的驱动程序 Hibernate EntityManager能否使用简单的JDBC兼容驱动程序来实现实体的EJB3 JPA持久化 我连接到的DBMS是否需要特定的Hibernate方言 值得一提的是,这里是我们目前在Spring中的E

我们有一个应用程序,它在服务器上使用Spring容器,使用EJB3实体和Hibernate将数据持久化到PostgreSQL数据库中

我想使用单独的EntityManager向单独的数据库添加另一个连接,但是DBMS(Trifox Vortex)的供应商没有
数据源
类型的驱动程序

Hibernate EntityManager能否使用简单的JDBC兼容驱动程序来实现实体的EJB3 JPA持久化

我连接到的DBMS是否需要特定的Hibernate方言

值得一提的是,这里是我们目前在Spring中的Entity Manager工厂的XML定义:

  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="UniWorks-EntityPersistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaDialect">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
    </property>
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="showSql" value="${db.showsql}"/>
        <property name="generateDdl" value="${db.generate}"/>
        <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect"/>
      </bean>
    </property>
    <property name="jpaProperties">
      <props>
        <prop key="hibernate.hbm2ddl.auto">${db.hbm2ddl}</prop>
      </props>
    </property>
  </bean>
所以看起来我可能不得不写我自己的方言子类。有人告诉我从哪里开始查找,或者扩展什么现有子类吗?

这应该可以(SimpleDriverDataSource+org.springframework.orm.jpa.vendor.Database.DEFAULT):


Hibernate可以使用数据源以外的连接池。因此,您可以使用c3p0或proxool或dbcp,甚至您自己的连接池。Hibernate确实有一个内置的连接池,尽管它只用于测试/原型设计;它将允许您只需传入驱动程序名称、url、用户名、密码,并将设置一些(非常)简单的池

要实现这一点,有几种不同的选择。首先,Hibernate总是通过统一的契约来处理获取和释放连接:
org.Hibernate.engine.jdbc.connections.spi.ConnectionProvider
。因此,一个选择是传入您自己的ConnectionProvider实现

另一个选项是传入要使用的驱动程序、url、用户名、密码和ConnectionProvider。对于驱动程序,url、用户名和密码Hibernate和JPA都定义了相应的机制。对于JPA,您可以使用persistence.xml或设置
javax.persistence.jdbc.driver
javax.persistence.jdbc.url
javax.persistence.jdbc.user
javax.persistence.jdbc.password
。对于ConnectionProvider,默认情况下Hibernate将选择不受支持的、不用于生产的。但是要告诉Hibernate使用另一个,您可以使用
Hibernate.connection.provider\u类设置。Hibernate内置支持将c3p0和proxool作为后端连接池进行集成(Hibernate将为您设置和管理c3p0/proxool池,并使用该池进行连接管理)

正如另一个答案所指出的,另一个选项是在驱动程序和连接信息周围使用数据源包装器


很抱歉,我不了解Spring,因此我不知道指定persistence.xml或JPA设置或Hibernate设置的所有Spring特定方法。

谢谢您的回答。在我给悬赏金之前,我会尝试建立一个工作实例来检验你的理论,但是如果看起来我不能在截止日期之前到达那里,我无论如何都会给你。干杯。我已经给了你赏金,因为你提供的代码确实让我比我想象的要远得多。在这个阶段,我可以看到(从堆栈跟踪)Spring正在调用hibernate,它正在创建简单的驱动程序数据源,但是目前实际的驱动程序本身正在抛出一个关于用户名和密码的错误,所以我想我们就快到了。谢谢。也许您可以提供一些stacktrace和您的数据源设置?(在我的代码中使用了H2数据库的默认用户和密码)我已经通过了用户/密码错误(JDBCURL不正确),现在我遇到了许可问题。只是等待供应商提供适当的评估许可证。干杯。您可能需要实现自定义拨号类(如此处-)并注册它()
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundle://222.0:0/META-INF/spring/cobol.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: UniWorks-CobolPersistenceUnit] Unable to build EntityManagerFactory
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)[59:org.springframework.context:3.1.1.RELEASE]
    at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69)[90:org.springframework.osgi.core:1.2.1]
    at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355)[90:org.springframework.osgi.core:1.2.1]
    at org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)[90:org.springframework.osgi.core:1.2.1]
    at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320)[90:org.springframework.osgi.core:1.2.1]
    at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132)[91:org.springframework.osgi.extender:1.2.1]
    at java.lang.Thread.run(Thread.java:662)[:1.6.0_24]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: UniWorks-CobolPersistenceUnit] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:132)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:268)[64:org.springframework.orm:3.1.1.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)[64:org.springframework.orm:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)[58:org.springframework.beans:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)[58:org.springframework.beans:3.1.1.RELEASE]
    ... 14 more
Caused by: org.hibernate.HibernateException: Unable to access java.sql.DatabaseMetaData to determine appropriate Dialect to use
    at org.hibernate.dialect.resolver.DialectFactory.determineDialect(DialectFactory.java:141)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:97)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:117)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2115)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1339)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)[80:com.springsource.org.hibernate:3.3.2.GA]
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)[80:com.springsource.org.hibernate:3.3.2.GA]
    ... 19 more
Caused by: java.sql.SQLException: getDatabaseMajorVersion: Not supported by VORTEXjdbc.
    at vortex.sql.vortexDbMetaData.getDatabaseMajorVersion(vortexDbMetaData.java:362)
    at org.hibernate.dialect.resolver.DialectFactory.determineDialect(DialectFactory.java:131)[80:com.springsource.org.hibernate:3.3.2.GA]
    ... 26 more
   <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
        <property name="driverClass" value="org.h2.Driver"/> <!-- put your driver here -->
        <property name="url" value="jdbc:h2:mem:test"/> <!-- put your jdbc url here -->
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>

            <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="persistenceUnitName" value="TestPersistenceUnit"/>
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
        </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="false"/>
                <property name="database" value="DEFAULT"/>
            </bean>
        </property>
    </bean>