Hibernate 透過 dialect 屬性適配不同資料庫的 SQL 差異 (分頁、鎖提示、型別映射、函數等)。正確設定方言是跨資料庫可移植的基石。
| 資料庫 | Dialect 類別全名 | 備註 |
|---|---|---|
| MySQL (InnoDB) | org.hibernate.dialect.MySQLInnoDBDialect | 支援交易、外鍵,生產首選 |
| MySQL (MyISAM) | org.hibernate.dialect.MySQLMyISAMDialect | 不支援交易,唯讀/日誌表可用 |
| MySQL (通用) | org.hibernate.dialect.MySQLDialect | 自動偵測儲存引擎 |
| Oracle 9i/10g/11g | org.hibernate.dialect.Oracle10gDialect | 支援分頁優化、Sequence、LOB |
| Oracle (通用) | org.hibernate.dialect.OracleDialect | 較舊版本相容 |
| PostgreSQL | org.hibernate.dialect.PostgreSQLDialect | 支援 UUID、JSONB、陣列型別 |
| SQL Server 2005+ | org.hibernate.dialect.SQLServerDialect | 支援分頁 (ROW_NUMBER)、Identity |
| SQL Server 2000 | org.hibernate.dialect.SQLServerDialect | 需配合 jTDS 驅動 |
| DB2 | org.hibernate.dialect.DB2Dialect | 支援 Sequence、Identity |
| Sybase ASE | org.hibernate.dialect.SybaseDialect | |
| HSQLDB | org.hibernate.dialect.HSQLDialect | 嵌入式測試常用 |
| Firebird | org.hibernate.dialect.FirebirdDialect | |
| Informix | org.hibernate.dialect.InformixDialect | |
| Ingres | org.hibernate.dialect.IngresDialect | |
| Progress | org.hibernate.dialect.ProgressDialect | |
| SAP DB / MaxDB | org.hibernate.dialect.SAPDBDialect | |
| PointBase | org.hibernate.dialect.PointbaseDialect | |
| FrontBase | org.hibernate.dialect.FrontbaseDialect | |
| InterBase | org.hibernate.dialect.InterbaseDialect | |
| Mckoi SQL | org.hibernate.dialect.MckoiDialect |
<session-factory>
<!-- MySQL 範例 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- SQL Server (jTDS) 範例 -->
<!--
<property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<property name="connection.url">jdbc:jtds:sqlserver://host:1433/dbname</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
-->
<!-- Oracle 範例 -->
<!--
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@host:1521:sid</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
-->
<property name="show_sql">true</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
</session-factory>
mysql-connector-java-5.1.x.jar (或 8.0.x 對應驅動類 com.mysql.cj.jdbc.Driver)jtds-1.3.1.jar (推薦) 或 Microsoft 官方 mssql-jdbc.jarojdbc6.jar (JDK6) / ojdbc8.jar (JDK8+)postgresql-42.x.jarregisterColumnType、getLimitString 等方法,支援特殊型別或分頁語法org.hibernate.dialect → org.hibernate.dialect.* 結構調整SessionFactory 內部 SQL 轉譯、鎖模式、結果集處理等核心行為