2016-06-30 8 views
1

manyのドキュメントで私たちはhibernate.cfg.xmlにdialectを定義して、どの言語を使用するか、または休止状態にする必要があります。この休止状態の基準はそれぞれのSQLを生成します。なぜ私たちはdilectを定義する必要があるのですか?hibernateの設定ファイル内にドライバを定義している場合

<property name="hibernate.conection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.dilect">org.hibernate.dialect.MySQLDilect</property> 

これ以上のことは、任意のデータベースプロバイダ用の複数のドライバと、バージョンごとに複数の方言が存在する可能性があります。

私の主張は、すでにドライバ(一意)を記述しているときでも、一度にjarの単一バージョンである場合でも、SQLを生成するだけでは不十分です。

答えて

0

ダイアレクトは、オプションの構成オプションです。通常、hibernateはデータベース接続に基づいて方言を自動検出できます。

異なる方言が必要な場合があります - 異なるバージョンのデータベースでは異なる方言が必要な場合があります。 - 方言をカスタマイズ/バグ修正し、指定します。

+0

私は方言がなく、アプリケーションで、それぞれのデータベース・プロバイダーのバージョンごとに異なる可能性があります同意します様々なバージョンを使用することはできません。 –

0

ドライバは一意であり、どのデータベースを接続するのに使用できますか?同じデータベースをサポートする多くのドライバクラスを用意することができます。 MySQLの場合共通のドライバが1つありますが、Oracleを検討してください。

多くのドライバがあります。これを確認するhttp://www.oracle.com/technetwork/java/index-136695.html

Hibernateは、指定可能なドライバのいずれかを使用する必要がある場合、使用する方言(SQL構文)をどのように知るのですか?したがって、DriverクラスとDialect to Hibernateの両方を指定する必要があります。

+0

はい、データベース用の複数のドライバが存在する可能性がありますが、いずれかを選択するだけでそれぞれのSQLを生成するには不十分です。 –

0

接続ドライブクラスは、データベース管理システム(DBMS)のベンダーを指摘するだけです。 1つのDBMSベンダには多くのバージョンがあるため、バージョンごとに特定の機能セットがあります。当時、DBMSごとに機能が追加されました。たとえば:

オラクル(1999年発売)

のOracle 8iのはorg.hibernate.dialect.Oracle10gDialect

を使用します(2003年発売) org.hibernate.dialect.Oracle9iDialect

のOracle 10gを使用します(2001年発売)org.hibernate.dialect.Oracle8iDialect

のOracle 9iのを使用します

Oracle 11g(2007年リリース)の使用org.hibernate.dialect.Oracle10gDialect

(2013年発売)

のOracle 12cを使用org.hibernate.dialect.Oracle12cDialect

これは、現在のバージョンでは方言の完全なリストは、次のとおりです。 https://docs.jboss.org/hibernate/orm/current/javadocs/org/hibernate/dialect/package-summary.html

+0

私は12cリリースで提供されているドライバを使用していますが、jars/mavem-dependencyを変更せずに自分のdilectを11gに切り替えることはできますか? –

+0

Oracleデータベースのバージョンを確認してください。そして、方言はこのバージョンに従うだけです。 –

関連する問題