Jboss Hibernate在其维基页面SupportedDatabases2中没有提及对SQLite的支持。
这个Stack Overflow的帖子也提到了同样的问题:Hibernate+SQLite+Netbeans
您能否请您指出这个问题?我想在Swing桌面应用程序中使用嵌入式SQLite和Hibernate。
我还在评估Derby(JavaDB),因为它也可以被嵌入,并且是JDK的一部分。
Jboss Hibernate在其维基页面SupportedDatabases2中没有提及对SQLite的支持。
这个Stack Overflow的帖子也提到了同样的问题:Hibernate+SQLite+Netbeans
您能否请您指出这个问题?我想在Swing桌面应用程序中使用嵌入式SQLite和Hibernate。
我还在评估Derby(JavaDB),因为它也可以被嵌入,并且是JDK的一部分。
有几种SQLite方言。
https://github.com/kemitix/sqlite-dialect
<dependency>
<groupId>net.kemitix</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>0.1.0</version>
</dependency>
Hibernate 配置:
hibernate.dialect = org.hibernate.dialect.SQLiteDialect
https://github.com/EnigmaBridge/hibernate4-sqlite-dialect
<dependency>
<groupId>com.enigmabridge</groupId>
<artifactId>hibernate4-sqlite-dialect</artifactId>
<version>0.1.2</version>
</dependency>
Hibernate 配置:
hibernate.dialect = com.enigmabridge.hibernate.dialect.SQLiteDialect
注意:本仓库作者已变更。基于 gwenn
仓库。
https://github.com/gwenn/sqlite-dialect/
作者与Hibernate团队合作,将其直接集成到Hibernate中。该过程在此问题中跟踪。
添加此依赖项:
<dependency>
<groupId>com.github.gwenn</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>0.1.2</version>
</dependency>
Hibernate配置:
hibernate.dialect = org.sqlite.hibernate.dialect.SQLiteDialect
hibernate.dialect=org.hibernate.dialect.identity.SQLiteDialect
,但仍然无法正常工作。我得到了一个异常,其消息如下:org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.identity.SQLiteDialect] as strategy [org.hibernate.dialect.Dialect]这是在Hibernate 5.0.12版本中出现的。 - MiguelMunozorg.sqlite.hibernate.dialect.SQLiteDialect
。 - Camilo Sanchez由于SQLite是用C编写的嵌入式数据库,适用于类C环境,并且编译成本地代码,因此Hibernate(或任何ORM)支持的更改并不太高。Java是跨平台的,使用平台相关的依赖项会有点奇怪。在Android上,使用SQLite,但平台提供了一个JDBC驱动程序。
通常,Windows二进制文件可兼容不同的Windows版本 - 只要体系结构保持不变即可。如果查看SQLite下载页面,您会注意到有一个32位预构建的Windows二进制文件。这个可以在几乎任何Windows版本上使用(也许除了Windows RT),但是不能在Linux或OS X上使用。为了从Java中使用SQLite,您需要包含特定操作系统/体系结构的正确二进制文件,从而使Java应用程序具有平台相关性。这通常不是您想要的。
如果您正在构建Swing桌面应用程序,并希望使用嵌入式数据库,则我的建议是使用Java嵌入式数据库,例如H2,HSQL或Derby。后者还随Oracle Java一起提供,作为JavaDB。所有这些都被支持为hibernate方言(有关方言的完整列表,请参见方言类:https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src/main/java/org/hibernate/dialect)
如@akostadinov所指出,您可能需要考虑其他因素,例如SQLite是用本地代码编写的,因此可能具有更好的性能。最终,只有建立系统的人才能决定哪个数据库是最好的。
hibernate.dialect
配置属性设置为org.hibernate.dialect.SQLiteDialect
。据我所知,SQLite在SQL语法方面非常宽容,因此可能有效。我没有在Hibernate中广泛使用过SQLite,但尝试将其与Infinispan一起使用并取得了一些成功。我找到的最佳推荐的原始SQLite JDBC驱动程序缺少一些JDBC标准方法,因此我必须对其进行修补才能使其正常工作。
我认为你可以尝试将其与Hibernate一起使用,并查看是否有效。这可能有助于您了解我如何将其与Infinispan一起使用:
https://issues.jboss.org/browse/ISPN-2980
我知道这不是您想要看到的确切答案,但我决定回答,因为我认为没有其他人能以更有帮助的方式回答。至少在当时我搜索更多信息时,我找不到。
从Hibernate 6开始,SQLite成为Hibernate存储库中的社区方言之一。
添加以下依赖项:
Gradle:
implementation("org.hibernate.orm:hibernate-community-dialects:6.1.6.Final")
Maven:
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-community-dialects</artifactId>
<version>6.1.6.Final</version>
</dependency>
并将其设置为 Hibernate 方言:
org.hibernate.community.dialect.SQLiteDialect
在这个Hibernate GitHub讨论中,了解更多关于Hibernate社区维护的方言。