NamingStrategyの使い方

概要

NamingStrategy とは、マッピングドキュメントから物理テーブル名とカラム名を決定するためのルールであり、org.hibernate.cfg.NamingStrategy インタフェースとして定義されています。

サブクラスの org.hibernate.cfg.ImprovedNamingStrategy クラスを用いて変換をした場合、クラス名やフィールド名は以下のように物理テーブル名やカラム名に変換されます。
UserName <-> user_name

ant の schemaexport タスクにおいて NamingStrategy を設定する方法

schemaexport タスクで、以下のように schemaexport 要素の namingStrategy 属性に NamingStrategy の FQCN を記述します。

	<target name="schemaexport" description="creates ddl from hbm.xml files.">
		<taskdef 
			name="schemaexport"
			classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"
		/>
		<schemaexport
			config="hibernate_export.cfg.xml"
			quiet="no"
			text="no"
			drop="no"
			delimiter=";"
			namingStrategy="org.hibernate.cfg.ImprovedNamingStrategy"
			output="ddl/schema-export.sql">
			<fileset dir="../../src/main/webapp/WEB-INF/classes">
			    <include name="**/*.hbm.xml"/>
			</fileset>
		</schemaexport>
	</target>

Configuration に対して NamingStrategy を設定する方法

net.sf.hibernate.cfg.Configuration#setNamingStrategy()メソッドに対して NamingStrategy を渡します。Hibernate を単体で利用する場合の例は Hibernate のマニュアルに書かれているので、今回は Spring Framework の applicationContext.xml ファイルで LocalSessionFactoryBean に対して NamingStrategy を設定する例を示します。

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" autowire="byName">
		<property name="mappingResources">
			<list>
				<value>sample/domain/entity/User.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
			</props>
		</property>
	</bean>	
	
	<bean id="namingStrategy" class="org.hibernate.cfg.ImprovedNamingStrategy" />