web-dev-qa-db-fra.com

Hibernate prend-il entièrement en charge SQLite

Jboss Hibernate ne dit rien sur le support de SQLite -

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

Et la même chose est mentionnée dans SO ci-dessous:

Hibernate + SQLite + Netbeans

Pouvez-vous s'il vous plaît mettre en évidence à ce sujet. Je souhaite utiliser Embedded SQLite avec hibernate pour l'application de bureau swing.

J'évalue également Derby (JavaDB) car il peut également être intégré et fait partie du jdk.

40
Atul

Étant donné que SQLite est une base de données intégrée pour les environnements de type C, écrite en C et donc compilée en code natif, les modifications prises en charge par Hibernate (ou tout autre ORM) ne sont pas vraiment importantes. Java est multiplateforme et il serait un peu bizarre d'avoir une dépendance dépendante de la plate-forme. Sur Android, SQLite est utilisé, mais là, la plate-forme fournit un pilote JDBC pour cela.

Habituellement, les binaires Windows sont compatibles sur différentes versions de Windows - tant que l'architecture reste la même. Si vous regardez la page de téléchargement SQLite , vous remarquerez qu'il existe un binaire Windows 32 bits pré-construit. Celui-ci peut être utilisé sur presque toutes les versions de Windows (sauf Windows RT, peut-être), mais vous ne pouvez pas l'utiliser sur Linux ou OS X. Pour utiliser SQLite à partir de Java, vous devez inclure le binaire correct pour le système d'exploitation spécifique/architecture, ce qui rend une application Java dépendante de la plate-forme. C'est quelque chose que vous ne voulez généralement pas.

Si vous créez une application de bureau dans Swing et que vous souhaitez utiliser une base de données intégrée, ma suggestion serait d'utiliser une base de données intégrée Java, comme H2 , - HSQL ou Derby . Ce dernier est également livré avec Oracle Java as JavaDB . Tous sont pris en charge comme dialectes d'hibernation (Pour une liste complète des dialectes, voir les classes de dialectes: https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src)/main/Java/org/hibernate/dialect )

Comme indiqué ci-dessous par @akostadinov, il peut y avoir d'autres facteurs que vous souhaitez prendre en compte, par exemple le fait que SQLite est écrit en code natif et donc peut avoir meilleure performance. En fin de compte, le seul qui peut décider quelle base de données est la meilleure est celui qui construit le système.

17
mthmulders

Il existe plusieurs dialectes SQLite.

Hibernation 3:

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

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

Configuration de mise en veille prolongée:

hibernate.dialect = org.hibernate.dialect.SQLiteDialect

Hibernation 4:

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

<dependency>
    <groupId>com.enigmabridge</groupId>
    <artifactId>hibernate4-sqlite-dialect</artifactId>
    <version>0.1.2</version>
</dependency>

Configuration de mise en veille prolongée:

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

Remarque: je suis l'auteur de ce référentiel. Basé sur le repo gwenn.

Hibernation 5:

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

Pas encore ajouté au référentiel central maven. L'auteur travaille avec l'équipe Hibernate pour l'intégrer directement à Hibernate. Il est suivi dans ce problème .

Pendant ce temps, vous pouvez utiliser https://jitpack.io/

Ajouter un référentiel jitpack:

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

Ajouter une dépendance:

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

Configuration de mise en veille prolongée:

hibernate.dialect = org.hibernate.dialect.SQLiteDialect
35
ph4r05

Si vous devez utiliser SQLite avec Hibernate pour une raison quelconque, vous avez besoin d'un dialecte personnalisé. Il semble qu'il y ait quelques implémentations sur le Web.

J'ai essayé celui-ci: https://github.com/gwenn/sqlite-dialect qui a fonctionné pour moi avec Hibernate 3 (je crois qu'il a besoin de quelques mises à jour pour Hibernate 4). Notez que vous devrez compiler le code vous-même, puis définir le hibernate.dialect la propriété de configuration doit être org.hibernate.dialect.SQLiteDialect.

Autres implémentations que j'ai trouvées: http://code.google.com/p/hibernate-sqlite/ et https://Gist.github.com/virasak/54436 .

6
jgibson

SQLite est très indulgent envers la syntaxe SQL pour autant que je sache, cela peut donc fonctionner. Je n'ai pas beaucoup utilisé SQLite avec hibernate mais j'ai essayé de l'utiliser avec infinispan avec un certain succès. Le pilote SQLite jdbc d'origine que j'ai trouvé le mieux recommandé n'a pas certaines des méthodes de la norme JDBC, j'ai donc dû le patcher pour le faire fonctionner.

Je pense que vous pouvez l'essayer avec hibernate et voir si cela fonctionne. Cela peut vous aider à voir ce que j'ai fait pour le faire fonctionner avec infinispan: https://issues.jboss.org/browse/ISPN-298

Je sais que ce n'est pas la réponse exacte que vous aimeriez voir, mais j'ai décidé de répondre parce que je pense qu'il y a peu de chance que quelqu'un d'autre puisse répondre de manière plus utile. Au moins, lorsque je cherchais plus d'informations à l'époque, je ne pouvais pas trouver.

3
akostadinov