2015年12月6日日曜日

HibernateのPhysicalNamingStrategyを使って識別子に任意のプレフィックス等を付加する

Hibernateでテーブル名やカラム名などに一律任意のサフィックスやプレフィックスを追加するには、PhysicalNamingStrategyを実装したクラスを作成し設定を追加しするだけでよい。

PhysicalNamingStrategyの実装クラス

PhysicalNamingStrategyのデフォルト実装のPhysicalNamingStrategyStandardImplを継承すると必要なメソッドだけ実装すればいいのでよい。
この例では、テブル名の先頭に「hoge_」を付加している。
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;

public class HogeNameStrategy extends PhysicalNamingStrategyStandardImpl {
    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        return Identifier.toIdentifier("hoge_" + name.getText(), name.isQuoted());
    }
}

persistence.xmlへPhysicalNamingStrategy実装クラスを設定

hibernate.physical_naming_strategyというプロパティに、作成したクラスのFQCNを設定する。
<properties>
  <property name="hibernate.physical_naming_strategy" value="sample.HogeNameStrategy" />
</properties>

結果

一律プレフィックスが追加されているのがわかる
Hibernate: create table HOGE_Item (id bigint not null, primary key (id))
Hibernate: create table "HOGE_user" (id bigint not null, name varchar(255), primary key (id))