【问题标题】:Unable to resolve name org.hibernate.dialect.SQLiteDialect无法解析名称 org.hibernate.dialect.SQLiteDialect
【发布时间】:2016-06-23 10:29:20
【问题描述】:

上周我说“让我们试试 WildFly 10!”在基本配置和 HelloWorld 内容之后,我想看看持久性是如何工作的。 A 拿了我的旧 ABC EAR 有一个 JPA 模块,其中 Hibernate 与 SQLite 一起使用。我设置了net.kemitix提供的方言。

所以,我在 POM 文件中设置了它的依赖关系:

<dependency>
    <groupId>net.kemitix</groupId>
    <artifactId>sqlite-dialect</artifactId>
    <version>0.1.0</version>
</dependency>

打包后的 EAR 如下所示:

ABC_Ear-0.0.1-SNAPSHOT.ear
    lib
        ABC_Jpa-0.0.1-SNAPSHOT.jar
        sqlite-dialect-0.1.0.jar
        sqlite-jdbc-3.8.11.2.jar

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="ABC_Jpa" transaction-type="JTA">
        <class>abc.jpa.User</class>
        <class>abc.jpa.Group</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:C:/sqlite/ABC.db"/>
            <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/>
            <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/AbcEntityManagerFactory" />
            <property name="jboss.entity.manager.jndi.name" value="java:/AbcEntityManager"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/> 
        </properties>
    </persistence-unit>
</persistence>

在部署过程中出现以下异常:

INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 67) WFLYJPA0010: Starting Persistence Unit (phase 2 of 2) Service 'ABC_Jpa-0.0.1-SNAPSHOT.jar#ABC_Jpa'
WARN  [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator] (ServerService Thread Pool -- 67) HHH000342: Could not obtain connection to query metadata : Unable to resolve name [org.hibernate.dialect.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]
ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 67) MSC000001: Failed to start service jboss.persistenceunit."ABC_Jpa-0.0.1-SNAPSHOT.jar#ABC_Jpa": org.jboss.msc.service.StartException in service jboss.persistenceunit."ABC_Jpa-0.0.1-SNAPSHOT.jar#ABC_Jpa": org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:172)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117)
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
    at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154)
    ... 7 more
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]

我还尝试将包含方言的 JAR 与驱动程序本身一起加载,但结果相同:

C:\wildfly-10.0.0.Final\modules\system\layers\base\org\xerial\sqlite-jdbc\main\module.xml

<module xmlns="urn:jboss:module:1.3" name="org.xerial.sqlite-jdbc">
    <resources>
        <resource-root path="sqlite-dialect-0.1.0.jar"/>
        <resource-root path="sqlite-jdbc-3.8.11.2.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

有人可以解决这个问题吗?同时,我将再次阅读 WildFly 文档中的相关部分 :-)

最好的问候, Kérdezösködő 印度人

【问题讨论】:

  • 我认为这是一个 jboss 服务问题。你可以在没有你的应用程序的情况下启动 jboss 并检查是否运行没有任何错误?
  • 是的,我可以。所有其他已部署的应用程序都运行良好。
  • 好的,那么 jboss 不是这里的问题。您可以通过编辑在您的问题中发布您的 hibernate.cfg.xml 配置吗?你在哪里设置方言?
  • 我只有一个persistence.xml,添加到问题中。
  • 看来&lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt; 是必须的。所以启动持久化单元。

标签: hibernate wildfly dialect


【解决方案1】:

出错

无法解析名称 [org.hibernate.dialect.SQLiteDialect]

我通过任何更改 int application.properties 来解决这个问题:

# for sqlite3
spring.datasource.url=jdbc:sqlite:test_db
spring.datasource.driver-class-name=org.sqlite.JDBC
# old wrond value
#spring.jpa.database-platform=org.hibernate.dialect.SQLiteDialect
# nedd value
spring.jpa.database-platform=org.sqlite.hibernate.dialect.SQLiteDialect

和 pom.xml 中的这个块:

    <dependency>
        <groupId>com.github.gwenn</groupId>
        <artifactId>sqlite-dialect</artifactId>
        <version>0.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.30.1</version>
    </dependency>

【讨论】:

    【解决方案2】:

    Hibernate 对 SQLite 的支持已停止,您可以通过包含外部依赖项来解决此问题。

    在你的 gradle.build 文件中添加这一行。

    repositories {
    mavenCentral()
    maven { url 'https://mvnrepository.com/artifact/net.kemitix/sqlite-dialect'}
    }
    

    还有

    compile group: 'net.kemitix', name: 'sqlite-dialect', version: '0.1.0'
    

    然后,将您的属性设置为 spring.jpa.database-platform:org.hibernate.dialect.SQLiteDialect

    【讨论】:

      【解决方案3】:

      对于 PostgresSQL(为我工作)

      当我们在 Wildfly 中定义数据源时,我们需要将 postgres JDBC 驱动程序添加到 Wildfly 10。

      创建以下目录wildfly-10.0.0.Final/modules/org/postgresql/main/ 将module.xml复制到wildfly-10.0.0.Final/modules/org/postgresql/main/

      将postgresql-9.4-1201-jdbc41.jar(可下载)复制到wildfly-10.0.0.Final/modules/org/postgresql/main/中

      ---- 模块.xml

      <resources>
          <resource-root path="postgresql-9.4-1201-jdbc41.jar"/>
      </resources>
      
      <dependencies>
          <module name="javax.api"/>
          <module name="javax.transaction.api"/>
      </dependencies>
      

      【讨论】:

        猜你喜欢
        • 2022-07-07
        • 2017-05-30
        • 2020-05-01
        • 1970-01-01
        • 2022-12-11
        • 2022-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多