NamingStrategy
hibernateでマッピングを行うときに、値を指定しないとデフォルト値が使われる。エンティティ名=テーブル名、プロパティ名=カラム名など。プロパティ名が長い場合、例えば、firstName というプロパティがあった場合、これはそのまま firstName というカラムにマッピングされる。Javaでは単語の連結のとき、次の単語の頭を大文字にしてつなげるのが一般的だが、データベースでは、_(アンダースコア)で繋げるのが一般的(だと思う)。
そういうときに、NamingStrategy を変更するとうまくこの差を吸収してくれる。デフォルトでは、DefaultNamingStrategy が使われるが、ImprovedNamingStrategy に変更すると、単語のつなぎをアンダースコアにしてくれる。他にも EJB3 specに準拠した EJB3NamingStrategy などもある。
使い方は Hibernate の Configuration に namingStratery をセットするだけ。
SessionFactory sf = new Configuration() .setNamingStrategy(ImprovedNamingStrategy.INSTANCE) .addFile("Item.hbm.xml") .addFile("Bid.hbm.xml") .buildSessionFactory();
Spring で使うには以下のように、SessionFactoryBean の namingStrategy にインジェクションすればよい。例では AnnotationSessionFactoryBean だが、LocalSessionFactoryBean でも同じ。
<bean id="sessionFactory" class= "org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>test.Parent</value> <value>test.Child</value> </list> </property> <property name="namingStrategy" ref="namingStrategy"/> </bean> <!-- NamingStrategy --> <bean id="namingStrategy" class="org.hibernate.cfg.ImprovedNamingStrategy" />