日本語のテーブル名・カラム名とHibernate

誓いを破ってO/Rマッピングツールに手を出してしまいました。独自のSQLフレームワークは開発を断念。いや、凍結。

Hibernate 2.1.4になってから、日本語のテーブル名・カラム名でも正しく動くようになった模様です。2.1.3で試した時はダメだったのですが。なお、DBMSPostgreSQL 7.3.4です。

ただし素直に使うと、マッピングしたJavaBeansクラスはこんな感じになります。

public class 従業員 implements Serializable
{
    private int 社員番号;
    private String 氏名;

    public int get社員番号() { ... }
    public void set社員番号(int 社員番号) { ... }

    public String get氏名() { ... }
    public void set氏名(String 氏名) { ... }

    ...
}

むむむむむ。これを許すかどうか・・・。ちゃんと動作はします。日本語の変数名やクラス名はJavaの言語仕様としてはOKですからね。

これが気に入らなければ、マッピングファイルで、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

  <class name="foo.bar.Employee" schema="public" table="従業員">
  <id column="社員番号" name="number" type="int">
    
  
  <property column="氏名" length="40" name="name" not-null="true" type="string"/>
  

という形で、カラム名と対応する内部名を定義する方法も採れます。こうすると、JavaBeansは、

public class Employee implements Serializable
{
    private int number;
    private String name;

    public int getNumber() { ... }
    public void setNumber(int number) { ... }

    public String getName() { ... }
    public void setName(String name) { ... }

    ...
}

となります。こちらも動作は確認しました。

追記
上記のマッピングファイルだと、SchemaExportで失敗します。Shift_JISで保存したら、うまくいきました。もちろんencoding="Shift_JIS"にすること。