6


Eclipse(Helios)でHibernateツール3.40を使用しています。DB(MSSQL 2008)からEJB3スタイル(つまり、JPA2.0アノテーション)を使用してPOJOを生成しようとしています。
2つのテーブルがAあり、fromからへBの外部キーがあるとします。 これにより、デフォルトで、メンバーとして(その「親」)を持つPOJOと、メンバーとして(その「子」)を持つPOJOが生成されます。 私が知りたいのは、関連付けの片側だけが作成されるようにrev-engを制御する方法を知りたいことです(ユースケースが異なるため、基本的に3つのオプションすべてが重要です)。AB
ABBSet<A>

アノテーションとJPA2.0を使用しているため、hbm.xmlファイルを使用したくありませんが、リバースエンジニアリングプロセスでメタデータを指定して、hibernae.reveng.xmlを介して休止状態にすることができます。

属性を構成してforeign-keyそこで定義しようとしましたexclude=trueが、1つのシナリオに対して半分の答えしか得られませんでした。これAにより、許容可能で理解可能なbPK intメンバーを持つPOJO生成されましたが、注釈に無効な属性があるため、生成されたPOJOはBコンパイルされません。休止状態one-to-manyのリベンがマップバックできるプロパティがなくなったためです。mappedby="unresolved"A

そのため、現在、一方向の関連付けを作成することはできません。ご協力いただければ幸いです。

4

2 に答える 2

4

でのクラスを作成しreveng. strategyますHibernate Code Generation Configuration

例 :

public class MyReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {

   public MyReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
       super(delegate);
   }

   @Override
   public void setSettings(ReverseEngineeringSettings settings) {
       super.setSettings(settings);
   }

   @Override
   public boolean excludeForeignKeyAsCollection(String keyname, 
    TableIdentifier fromTable, java.util.List fromColumns, 
    TableIdentifier referencedTable, java.util.List referencedColumns) {

    // TODO : Your work here
    if (keyname.equals("___") && 
        fromTable.getName().equals("___") && 
        fromColumns.contains("___") && 
        referencedTable.getName().equals("___") && 
        referencedColumns.contains("___")) {

        return true;
    }

    return false;
   }
}

メソッドのJavaDocexcludeForeignKeyAsCollection

Should this foreignkey be excluded as a oneToMany 

また、別のメソッド呼び出しもありますexcludeForeignKeyAsManytoOne

Should this foreignkey be excluded as a many-to-one 
于 2011-03-11T05:34:17.810 に答える
1

現在(Hibernate Tools 5.2でテスト済み)、一方向の多対1の作品を生成しています。

ドキュメント(https://docs.jboss.org/tools/4.0.0.Final/en/hibernatetools/html_single/index.html#hibernaterevengxmlfile)で、関係の一部を除外できることがわかります。

例(プロパティの名前変更)

 <!-- control many-to-one and set names for a specific named foreign key constraint -->
 <foreign-key constraint-name="ORDER_CUST">
   <many-to-one property="customer"/>
   <set property="orders"/>
 </foreign-key>

または(プロパティを除く)

 <!-- can also control a pure (shared pk) one-to-one  -->
  <foreign-key constraint-name="ADDRESS_PERSON">
   <one-to-one exclude="false"/>
   <inverse-one-to-one exclude="true"/>
  </foreign-key>

したがって、@ ManyToOneとの関係の片側だけを使用するには、次のようにすることができます。

<table name="city" schema="public">
    <primary-key property="id">
        <key-column name="id" type="integer"/>
    </primary-key>
</table>

<table name="country" schema="public">
    <foreign-key constraint-name="country_capital_fkey" foreign-schema="public">
        <many-to-one property="capital" exclude="false"/>
        <set exclude="true" />
    </foreign-key>
</table>

ここで、Dockerを使用してサンプルデータベースのインスタンスをフェッチすることもできます。

docker pull ghusta / postgres-world-db:2.1

于 2017-06-23T10:46:37.367 に答える