Was ist die MariaDB Dialekt Klasse name für Hibernate?
In Hibenate ich bin mit MariaDB aber ich konnte nicht finden, dass der Dialekt Klasse name MariaDB .
In Hibernate, MySQL5 Dialekt ist der name
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
Für Oracle 10g
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
Was ist der Dialekt Klasse name für MariaDB?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als hier bekannt gegeben, beginnend mit Hibernate ORM 5.2.8 (etwa Feb 15, 2017), die Dialekte
org.hibernate.dialect.MariaDB53Dialect
und
org.hibernate.dialect.MariaDBDialect
verfügbar sind. Die Ankündigung zu dem Schluss, dass
Sehr kurze Antwort
Den aktuellen Dialekte als des Schreibens dieses Artikels sind:
Kurze Antwort
Wenn mit einer MariaDB-server, sollten Sie verwenden MariaDB Connector/J und MariaDB Hibernate Dialekte, nicht die MySQL diejenigen. Obwohl MariaDB wurde als ein drop-in-Ersatz und obwohl die grundlegenden features wird wahrscheinlich die Arbeit, wenn Sie den MySQL-Versionen von denen, subtile Probleme auftreten oder Sie vermissen bestimmte Funktionen.
Eine vollständige Liste der verfügbaren MariaDB Dialekte sind derzeit nicht erwähnt wird in der Hibernate-Benutzer-Führer, aber in der Hibernate JavaDocs.. Je nach MariaDB server version haben, sollten Sie den entsprechenden Dialekt-version. Die aktuelle Dialekte als des Schreibens dieses Artikels sind:
Beachten Sie, dass für detaillierte Informationen zur Nutzung, werden Sie manchmal zu schauen, im Dialekt source-codes. (Es gibt non-JavaDoc-Informationen zur Nutzung der Kommentare in einigen Dialekt-Quellen.)
Wenn Sie etwas ändern wollen oder explizit die Speicher-engine für MariaDB Dialekt, können Sie die
storage_engine
Hibernate variable. Zum Beispiel:hibernate.dialect.storage_engine = innodb
. IMO, sollten Sie dies ausdrücklich tun, da der Vorgabewert kann sich ändern, wenn der Wechsel zu einem anderen MariaDB server version.Wenn Sie mit einer MariaDB-server, die älter als 10.1.2 (das nicht unterstützen Sekundenbruchteile), dann möchten Sie vielleicht, um die parameter
useFractionalSeconds=false
auf die JDBC-URL, ansonsten wird MariaDB-Connector/J nicht zu kürzen, Zeitstempel intern, die verursachen können time Vergleich problem, wenn diese Werte im Vergleich Abfragen (auch bei plain-JDBC), die kann dazu führen, Hibernate versionsprobleme und optimistic locking-Probleme für die zeitliche Typen.Lange Antwort
Den MariaDB-Dialekt für Hibernate (5.3 als dies geschrieben wurde) ist bereits in der Ruhezustand Benutzerhandbuch. Der erwähnte Dialekt "kurze Namen", gefolgt von Bemerkungen:
Jedoch eine vollständige Liste der verfügbaren offiziellen MariaDB-Dialekte finden sich in der Hibernate JavaDocs.. Die derzeit Listen:
Jeder Dialekt Nachfolger erbt die Einstellungen aus der vorherigen Dialekt-version. Also die Hierarchie-Vererbung für MariaDB ist:
MariaDB103Dialect > MariaDB102Dialect > MariaDB10Dialect > MariaDB53Dialect > MariaDBDialect > MySQL5Dialect > MySQLDialect > Dialect
MariaDB wurde als ein drop-in-replacement für MySQL. Aber die Datenbanken gehen wahrscheinlich auseinander wie die Zeit vergeht. Die meisten grundlegenden Funktionen wohl funktionieren ohne Probleme, so dass Sie swap-Connector/J-clients (MariaDB-client auf dem MySQL server und Umgekehrt), und ermöglichen es Ihnen, swap-Dialekten (MySQL-Dialekt auf MariaDB-client und Umgekehrt). Aber es gibt subtile Unterschiede, die zu unvorhergesehenen Problemen führen. Zum Beispiel, den MySQL Connector/J-client enthält eine fest programmierte Prüfungen für die server-version, die dann Versagen, wenn Sie mit einer MariaDB-server, wodurch einige Funktionen deaktiviert werden, der client, wie die MySQL-sendFractionalSeconds client-parameter. Dadurch wird in Bruchteilen von Sekunden gesperrt werden, damit dann die Fraktionen gekürzt in der MySQL-client, nicht aber in der MariaDB-client. (Dies kann auch führen zu optimistischen locking-Probleme bei der Verwendung der Versionsverwaltung mit Datum/Zeit-Typen in Kombination mit non-max precision SQL Datum/Zeit-Typen. In diesen Fällen werden die max-Präzision 6.)
Auch, das MariaDB-Dialekt erwartet werden, um spezifische Funktionalität für MariaDB:
http://in.relation.to/2017/02/16/mariadb-dialects/
Und https://hibernate.atlassian.net/browse/HHH-11457 sagt:
Den Ruhezustand Benutzerhandbuch enthält nicht alle Informationen zur Nutzung der über die Verwendung der Dialekte. Auch in der Bedienungsanleitung, kombiniert mit den API-docs kann nicht genug sein. Manchmal müssen Sie einen Blick in die source-codes für die Nutzung von Informationen. Zum Beispiel, MariaDB53Dialect.java enthält versteckte non-JavaDoc-Kommentare, die nützlich sein können.
Zuvor wählen Sie eine MySQL-Speicher-engine, wie MyISAM oder InnoDB oder Standard, Sie könnte Umschalten zwischen beispielsweise
MySQL57InnoDBDialect
undMySQL57Dialect
. Aber Sie umgestaltet werden, der MySQL-Dialekt Hierarchie ab Hibernate 5.2.8, wie erwähnt, in einem Hibernate blog-post. Beachten Sie, dass wählen Sie eine Speicher-engine verwenden, sollten Sie die Environment-Variable oder Eigenschaft System:hibernate.dialect.storage_engine
. Zum Beispiel:hibernate.dialect.storage_engine = innodb
.XtraDB war der Standard MariaDB-Speicher-engine für MariaDB 10.1 und früher, aber seit 10.2 es ist InnoDB. So gibt es Fälle, die Sie wollen explizit die Speicher-engine, Hibernate wählt, ja dann müssen Sie die
storage_engine
variable. Info über diestorage_engine
variable (das ist nicht erwähnt in der "User Guide") finden Sie in der Quelle desAvailableSettings.java
.Wenn Sie mit einer MariaDB-server, die älter als 10.1.2 (das nicht unterstützen Sekundenbruchteile), dann möchten Sie vielleicht, um die parameter
useFractionalSeconds=false
auf die JDBC-URL, ansonsten wird MariaDB-Connector/J nicht zu kürzen, Zeitstempel intern, die verursachen können time Vergleich problem, die kann dazu führen, Hibernate versionsprobleme und optimistic locking-Probleme für die zeitliche Typen.NHibernate
auch?Sollten Sie die Mysql5Dialect, weil MariaDB ist 100% kompatibel mit mysql.
Vom hier, es wurde erwähnt
"es muss die MySQL5InnoDBDialect oder MySQL57InnoDBDialect statt der MySQLInnoDBDialect"
Für die vollständige Liste finden Sie unter
http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#database-dialect
Neuen MariaDB-Dialekt Hinzugefügt 5.2.17. Sehen JIRA und Begehen