Hibernate是否完全支持SQLite

时间:2013-07-11 07:45:09

标签: java hibernate sqlite

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

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

同样在下面提到SO:

Hibernate+SQLite+Netbeans

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

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

4 个答案:

答案 0 :(得分:34)

有几种SQLite方言。

Hibernate 3:

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

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>

Hibernate配置:

hibernate.dialect = com.enigmabridge.hibernate.dialect.SQLiteDialect

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

Hibernate 5:

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

尚未添加到maven中央存储库。作者与Hibernate团队合作,将其直接集成到Hibernate。它会在issue中进行跟踪。

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

添加jitpack存储库:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

添加依赖项:

<dependency>
    <groupId>com.github.gwenn</groupId>
    <artifactId>sqlite-dialect</artifactId>
    <version>master</version>
</dependency>

Hibernate配置:

hibernate.dialect = org.hibernate.dialect.SQLiteDialect

答案 1 :(得分:15)

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

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

如果您在Swing中构建桌面应用程序并且想要使用嵌入式数据库,我的建议是使用Java嵌入式数据库,例如H2HSQL或{{3} }。后者也随Oracle Derby一起提供。所有都支持为休眠方言(有关方言的完整列表,请参阅方言类:JavaDB

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

答案 2 :(得分: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

答案 3 :(得分:3)

就我的经验而言,SQLite对SQL语法非常宽容,因此它可能会起作用。我没有广泛使用SQLite与hibernate,但尝试使用infinispan并取得了一些成功。我发现最好推荐的库存SQLite jdbc驱动程序缺少一些JDBC标准的方法,所以我不得不修补它以使其工作。

我认为您可以尝试使用hibernate并查看它是否有效。它可以帮助你看到我做了什么让它与infinispan一起工​​作: https://issues.jboss.org/browse/ISPN-2980

我知道这不是您希望看到的确切答案,但我决定回答,因为我认为其他任何人都没有机会以更有帮助的方式回答。至少当我在找不到的时候搜索更多信息时。