Hibernateの方言編


Hibernateは方言(dialect)を用いてデータベースの操作のプラットフォーム間性を実現する.
 
1、使い方
使用者は、hibernate.cfg.xmlなどのhibernateのプロファイルで使用するhibernate方言を設定する必要があります.
org.hibernate.dialect.Oracle9Dialect

 
2、hibernateがサポートする方言: 
RDBMS方言
DB2
org.hibernate.dialect.DB2Dialect
DB2 AS/400
org.hibernate.dialect.DB2400Dialect
DB2 OS390
org.hibernate.dialect.DB2390Dialect
PostgreSQL
org.hibernate.dialect.PostgreSQLDialect
MySQL
org.hibernate.dialect.MySQLDialect
MySQL with InnoDB
org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM
org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version)
org.hibernate.dialect.OracleDialect
Oracle 9i/10g
org.hibernate.dialect.Oracle9Dialect
Sybase
org.hibernate.dialect.SybaseDialect
Sybase Anywhere
org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server
org.hibernate.dialect.SQLServerDialect
SAP DB
org.hibernate.dialect.SAPDBDialect
Informix
org.hibernate.dialect.InformixDialect
HypersonicSQL
org.hibernate.dialect.HSQLDialect
Ingres
org.hibernate.dialect.IngresDialect
Progress
org.hibernate.dialect.ProgressDialect
Mckoi SQL
org.hibernate.dialect.MckoiDialect
Interbase
org.hibernate.dialect.InterbaseDialect
Pointbase
org.hibernate.dialect.PointbaseDialect
FrontBase
org.hibernate.dialect.FrontbaseDialect
Firebird
org.hibernate.dialect.FirebirdDialect
 
3、方言をカスタマイズする
実際に使用すると、hibernateが持参した方言は実際の応用要求を満たしていないので、方言をカスタマイズします.
注意して、車輪を再構築しないで、カスタマイズされた方言は原生方言に継承され、原生方言が提供するものが引き続き使用されることを保証することができます.たとえば
public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect

 
コードの例:
public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect {
	public MySQL5Dialect(){
		super();
		//        ,      ,  ?1 > ?2,      ,     
		registerFunction("timediffsecond",new SQLFunctionTemplate(Hibernate.INTEGER,"time_to_sec(timediff(?1,?2))"));
		/**
		 *        ,              。
		 *     0:            ;
		 *      0:           .
		 *   :locate(('bar', 'foobarbar').
		 */
		registerFunction("locate",new StandardSQLFunction("locate",Hibernate.INTEGER));
	}
}