3

私は持っています

  • CakePHPアプリケーションで現在本番環境で使用されているMySQLデータベース
  • 現在開発中のHibernateを介して同じデータベースにアクセスするJavaSEアプリケーション。

Netbeansの「自動移行」機能を使用してPOJOクラスとXMLファイルを作成しています(注釈を使用する場合、本当にXMLファイルが必要ですか?)。スキーマは非常に複雑であるため、テーブルを手動で作成するのは非常に手間がかかります。

Cakeは、すべてのDBテーブルが複数形になることを想定しています(Addressクラスは自動的にaddressesテーブルにマップされます)。Netbeans自動移行を実行すると、すでに複数形になっているテーブル名に対して複数形が実行されます(Addresses.javaメソッドとsetAddresseses()メソッドを取得しています)。

同じデータベースに対して2つの非常に異なるデータレイヤーを実行する際に問題が発生することはわかっていますが、NetbeansでPOJOクラスを単一の形式で生成できるかどうか、または別の(より良い)管理方法があるかどうかを知りたいです。これ。

4

1 に答える 1

2

リバース エンジニアリングを行う場合、カスタムのリバース エンジニアリング戦略を使用できます。ドキュメントの引用:

ユーザー戦略を実行することが可能です。そのような戦略は実装する必要 があります。org.hibernate.cfg.reveng.ReverseEngineeringStrategy. を使用し、 別のコンストラクターを引数としてDelegatingReverseEngineeringStrategy 取るパブリック コンストラクターを提供する ことをお勧めします。ReverseEngineeringStrategyこれにより、関連するメソッドのみを実装し、フォールバック戦略を提供できます。「PK」で終わるすべての列名を「id」という名前のプロパティに変換するカスタム委任戦略の例。

public class ExampleStrategy extends DelegatingReverseEngineeringStrategy {
    public ExampleStrategy(ReverseEngineeringStrategy delegate) {
        super(delegate);
    }
    public String columnToPropertyName(TableIdentifier table, String column) {
        if(column.endsWith("PK")) {
            return "id";
        } else {
            return super.columnToPropertyName(table, column);
        }
    }
}

あなたの場合、実装したいかもしれません

public String tableToClassName(TableIdentifier tableIdentifier) {
    return delegate==null?null:delegate.tableToClassName(tableIdentifier);
}

ADDRESSESテーブル名 ( => )から生成されたクラスを「複数化」しますAddress

残念ながら、NetBeans Hibernate リバース エンジニアリング ウィザードには 、リバース エンジニアリング戦略を選択するオプションがありません (時間が許せば、これは NetBeans 7.0 で計画されている機能拡張です)。

したがって、カスタム戦略を使用する場合は、Ant または Maven を使用する必要があります。これは現在、NetBeans からはできません。

于 2010-02-16T21:00:36.383 に答える