Hibernate是否完全支持SQLite

Atu*_*tul 42 java sqlite hibernate

Jboss Hibernate对SQLite的支持没有任何说明 -

https://community.jboss.org/wiki/SupportedDatabases2

同样在下面提到SO:

休眠+ SQLite的+ Netbeans的

能否请你强调一下这个.我想将嵌入式SQLite与hibernate一起用于swing桌面应用程序.

我也在评估Derby(JavaDB),因为它也可以嵌入并且是jdk的一部分.

ph4*_*r05 35

那里有几种SQLite方言.

Hibernate 3:

https://github.com/kemitix/sqlite-dialect

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

Hibernate配置:

hibernate.dialect = org.hibernate.dialect.SQLiteDialect
Run Code Online (Sandbox Code Playgroud)

Hibernate 4:

https://github.com/EnigmaBridge/hibernate4-sqlite-dialect

<dependency>
    <groupId>com.enigmabridge</groupId>
    <artifactId>hibernate4-sqlite-dialect</artifactId>
    <version>0.1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Hibernate配置:

hibernate.dialect = com.enigmabridge.hibernate.dialect.SQLiteDialect
Run Code Online (Sandbox Code Playgroud)

注意:我是此存储库的作者.基于gwenn回购.

Hibernate 5:

https://github.com/gwenn/sqlite-dialect/

尚未添加到maven中央存储库.作者与Hibernate团队合作,将其直接集成到Hibernate.它在本期中被跟踪.

同时你可以使用https://jitpack.io/

添加jitpack存储库:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

添加依赖:

<dependency>
    <groupId>com.github.gwenn</groupId>
    <artifactId>sqlite-dialect</artifactId>
    <version>master</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Hibernate配置:

hibernate.dialect = org.hibernate.dialect.SQLiteDialect
Run Code Online (Sandbox Code Playgroud)

  • [Hibernate 5 的最新代码](https://github.com/gwenn/sqlite-dialect/blob/master/src/main/java/org/sqlite/hibernate/dialect/SQLiteDialect.java) 的类名与答案。方言应该是:`org.sqlite.hibernate.dialect.SQLiteDialect` (3认同)
  • 使用 Hibernate 5 的 jitpack.io 解决方案,我发现属性需要是这样的:`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] 这是使用休眠 5.0.12。 (2认同)
  • Hibernate 5 版本已经发布到 maven,以下内容可以在这里找到:https://search.maven.org/artifact/com.github.gwenn/sqlite-dialect/0.1.0/jar (2认同)

mth*_*ers 18

由于SQLite是用于类C环境的嵌入式数据库,用C语言编写并编译为本机代码,因此Hibernate(或任何ORM)支持的更改并不高.Java是跨平台的,拥有依赖于平台的依赖关系会有点奇怪.在Android上,使用了SQLite,但平台为它提供了JDBC驱动程序.

通常,Windows二进制文件在不同的Windows版本上兼容 - 只要架构保持不变即可.如果您查看SQLite下载页面,您会注意到有一个32位预构建的Windows二进制文件.这个可用于几乎任何Windows版本(可能除了Windows RT之外),但是你不能在Linux或OS X上使用它.为了从Java使用SQLite,你需要为特定的OS包含正确的二进制文件体系结构,有效地使Java应用程序依赖于平台.那是你通常不想要的东西.

如果您在Swing中构建桌面应用程序并且想要使用嵌入式数据库,我的建议是使用Java嵌入式数据库,如H2,HSQLDerby.后者也随Oracle Java一起提供JavaDB.所有都支持为hibernate方言(有关方言的完整列表,请参阅方言类:https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src/main/java/org/hibernate /方言)

如下所述@akostadinov,您可能还需要考虑其他因素,例如,SQLite是用本机代码编写的,因此可能具有更好的性能.最后,唯一可以决定哪个数据库最好的是构建系统的人.

  • 我明白了hibernate,但是对于平台依赖,sqlite文档说 - SQLite中的数据库是一个单独的磁盘文件.此外,文件格式是跨平台的.可以在具有不同体系结构的不同计算机上复制和使用在一台计算机上创建的数据库.SQLite数据库可以跨32位和64位计算机以及big-endian和little-endian体系结构之间移植. (8认同)
  • 数据库_file_可通过平台移植 - 但访问此类文件的代码是本机代码,因此需要为要运行它的每个平台进行编译. (2认同)
  • SQLite 不限于“类 C 环境”,用 C 编写的代码可以为许多平台编译。SQLite 可用于 windows、mac、linux 和许多处理器架构。通过使用适当的方言和正确配置的数据源和良好的 SQLite JDBC 驱动程序 (https://github.com/xerial/sqlite-jdbc),SQLite 可以与 Hibernate 一起使用。 (2认同)
  • 平台独立性的论点不是很好,因为 Hibernate 确实支持一些非平台独立性的数据库,例如 MS SQL(甚至在支持的数据库列表中排名第三) (2认同)

jgi*_*son 6

如果您因任何原因需要使用SQLite和Hibernate,那么您需要一个自定义方言.看起来网络上有一些实现.

我尝试了这个:https://github.com/gwenn/sqlite-dialect,它对Hibernate 3有用(我相信它需要一些Hibernate 4的更新).请注意,您必须自己编译代码,然后将hibernate.dialect配置属性设置为org.hibernate.dialect.SQLiteDialect.

我找到的其他实现:http://code.google.com/p/hibernate-sqlite/https://gist.github.com/virasak/54436.


Mah*_*zad 6

Hibernate 6开始,SQLite 成为Hibernate 存储库中社区方言的一部分。

添加以下依赖项:

摇篮:

implementation("org.hibernate.orm:hibernate-community-dialects:6.4.1.Final")
Run Code Online (Sandbox Code Playgroud)

行家:

<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-community-dialects</artifactId>
    <version>6.4.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在配置文件之一中设置方言:

JPA ( src/main/resources/META-INF/persistence.xml):

<persistence ...>
  <persistence-unit ...>
    <properties ...>
      <property name="jakarta.persistence.jdbc.driver" value="org.sqlite.JDBC"/>
Run Code Online (Sandbox Code Playgroud)

休眠 ( hibernate.properties):

hibernate.dialect=org.hibernate.community.dialect.SQLiteDialect
Run Code Online (Sandbox Code Playgroud)

春季启动 ( application.properties):

spring.jpa.properties.hibernate.dialect=org.hibernate.community.dialect.SQLiteDialect
Run Code Online (Sandbox Code Playgroud)

在此 Hibernate GitHub 讨论中了解有关 Hibernate 社区维护的方言的更多信息。