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

Kér*_*ián 3 hibernate dialect wildfly

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

\n\n

因此,我在 POM 文件中设置了它的依赖项:

\n\n
<dependency>\n    <groupId>net.kemitix</groupId>\n    <artifactId>sqlite-dialect</artifactId>\n    <version>0.1.0</version>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

打包后的 EAR 如下所示:

\n\n
ABC_Ear-0.0.1-SNAPSHOT.ear\n    lib\n        ABC_Jpa-0.0.1-SNAPSHOT.jar\n        sqlite-dialect-0.1.0.jar\n        sqlite-jdbc-3.8.11.2.jar\n
Run Code Online (Sandbox Code Playgroud)\n\n

持久化.xml:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<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">\n    <persistence-unit name="ABC_Jpa" transaction-type="JTA">\n        <class>abc.jpa.User</class>\n        <class>abc.jpa.Group</class>\n        <properties>\n            <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:C:/sqlite/ABC.db"/>\n            <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/>\n            <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/AbcEntityManagerFactory" />\n            <property name="jboss.entity.manager.jndi.name" value="java:/AbcEntityManager"/>\n            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect"/>\n            <property name="hibernate.show_sql" value="true"/>\n            <property name="hibernate.hbm2ddl.auto" value="create"/> \n        </properties>\n    </persistence-unit>\n</persistence>\n
Run Code Online (Sandbox Code Playgroud)\n\n

部署过程中出现如下异常:

\n\n
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\'\nWARN  [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]\nERROR [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]\n    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:172)\n    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117)\n    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)\n    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182)\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n    at java.lang.Thread.run(Thread.java:745)\n    at org.jboss.threads.JBossThread.run(JBossThread.java:320)\nCaused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]\n    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)\n    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)\n    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)\n    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)\n    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)\n    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)\n    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)\n    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)\n    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)\n    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)\n    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)\n    at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)\n    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154)\n    ... 7 more\nCaused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
<module xmlns="urn:jboss:module:1.3" name="org.xerial.sqlite-jdbc">\n    <resources>\n        <resource-root path="sqlite-dialect-0.1.0.jar"/>\n        <resource-root path="sqlite-jdbc-3.8.11.2.jar"/>\n    </resources>\n    <dependencies>\n        <module name="javax.api"/>\n        <module name="javax.transaction.api"/>\n    </dependencies>\n</module>\n
Run Code Online (Sandbox Code Playgroud)\n\n

有人对这个问题有有效的解决方案吗?同时我将再次重读 WildFly 文档中的相关部分:-)

\n\n

最好的问候,\nK\xc3\xa9rdez\xc3\xb6sk\xc3\xb6d\xc5\x91 Indi\xc3\xa1n

\n

小智 8

出错时

无法解析名称 [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
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)