hibernateを使用してPOJOを生成するときに、POJOの名前を変更する方法を知りたいのですが。
私のテーブルには、FR_とTRN_の命名規則があります。POJOを生成しているときに、FRとTRNを削除し、名前にVOを追加したいと思います。
例えば、
テーブル名:FR_ACCOUNT_MST
生成されるPOJO:accountMstVO
ありがとう、ヴァルン
hibernateを使用してPOJOを生成するときに、POJOの名前を変更する方法を知りたいのですが。
私のテーブルには、FR_とTRN_の命名規則があります。POJOを生成しているときに、FRとTRNを削除し、名前にVOを追加したいと思います。
例えば、
テーブル名:FR_ACCOUNT_MST
生成されるPOJO:accountMstVO
ありがとう、ヴァルン
そうです、 DelegatingReverseEngineeringStrategyクラス (hibernate-tool.jar lib)を拡張し、tableToClassNameメソッドをオーバーライドする必要があります。
以下のコードは、FR_ACCOUNT_MST を FR_ACCOUNT_MSTVO に名前変更します。
正規表現を使用して、必要な結果を取得できるようにします。
変数 className には、パッケージ + クラス名 (つまり、com.mycompany.project.hibernate.FR_ACCOUNT_MST) が含まれます。
ソース: http://www.cereslogic.com/pages/2008/08/05/hibernate-tools-tips-for-reverse/
package com.altenor.coffre.generated;
import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.TableIdentifier;
public class CoffreReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {
public CoffreReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
super(delegate);
}
//add Base before class name
public String tableToClassName(TableIdentifier tableIdentifier) {
String className = super.tableToClassName(tableIdentifier);
return className+"VO";
}
}
または、hibernate.reveng.xmlファイルに各 pojo の名前を追加することで実行できます。
<hibernate-reverse-engineering>
<table-filter match-schema="CO" match-name="FR_ACCOUNT_MST"/>
<table name="FR_ACCOUNT_MST" schema="CO" class="com.bonables.co.hibernate.pojo.accountMstVO" />
</hibernate-reverse-engineering>
データベースメタデータからドメインモデルクラスをリバースエンジニアリングするHibernateToolの機能を使用していると想定しています。その場合、ここでorg.hibernate.cfg.reveng.ReverseEngineeringStrategy
説明するようにカスタムを実装することをお勧めします。