PhysicalNamingStrategyを使った識別子の変更とは異なり、明示的に識別子を指定した場合は、このクラスは呼び出されない。また、ImplicitNamingStrategyのほうが、命名ルールを細かく設定できる。
ImplicitNamingStrategyの実装クラス
JPAの場合はデフォルト実装のImplicitNamingStrategyJpaCompliantImplを継承する。PhysicalNamingStrategyとくらべてかなり多くのメソッドが定義されているけど、テーブル名であればdeterminePrimaryTableNameをオーバライドしてあげるとよい。
サンプル実装では、テーブル名の後ろに「_TBL」を付加している。
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.ImplicitEntityNameSource;
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;
public class HogeImplicitNamingStrategy extends ImplicitNamingStrategyJpaCompliantImpl {
    @Override
    public Identifier determinePrimaryTableName(ImplicitEntityNameSource source) {
        Identifier tableName = super.determinePrimaryTableName(source);
        return Identifier.toIdentifier(tableName.getText() + "_TBL");
    }
}
persistence.xmlにImplicitNamingStrategy実装クラスを設定
hibernate.implicit_naming_strategyというプロパティに、作成したクラスのFQCNを設定する。<properties> <property name="hibernate.implicit_naming_strategy" value="sample.HogeImplicitNamingStrategy" /> </properties>
結果
テーブル名の末尾に「_TBL」が設定されているのが確認できる。usersエンティティは、@Tableアノテーションが設定されているので、「_TBL」が付加されない。Hibernate: create table Item_TBL (id bigint not null, primary key (id)) Hibernate: create table users (id bigint not null, name varchar(255), primary key (id))
