2


Hibernate クラスを自動的に作成する FreeMarker カスタム リバース エンジニアリング テンプレートを実装しようとしています。
ビルド プロセスでは、テンプレートは hibernate-tools によって使用され、hibernate クラスが生成されます。
これまでのところ、その目的のためにデフォルトの freemarker テンプレートを使用していますが、問題なく動作します。

しかし今、私は疑問に直面しています:
デフォルトの getter-annotations に追加のプロパティを追加するにはどうすればよいですか?

One-to-may アソシエーションのデフォルトの freemarker メソッドは次のとおりです (Ejb3PropertyGetAnnotation.ftl に実装されています)。

...
<#elseif c2h.isCollection(property)>
    ${pojo.generateCollectionAnnotation(property, cfg)}
...

生成された Java コードは、たとえば次のとおりです。

@OneToMany(fetch=FetchType.LAZY, mappedBy="person")      
public Set<ContactInformation> getContactInformations() {
    return this.contactInformations;
}

しかし、次のようにcascade = CascadeType.ALLを各一対多ゲッター注釈に追加したい:

@OneToMany(cascade = CascadeType.ALL
           fetch=FetchType.LAZY, mappedBy="person")

私はフリーマーカーと休止状態が初めてで、これをアーカイブする方法がわかりません。

助けてくれてどうもありがとう!

4

2 に答える 2

0

私は、注釈が

cascade = CascadeType.All  

必ずしも @OneToMany メソッドの署名に含まれている必要はありません。

解決策は、次の行を Freemarker テンプレート ファイル Ejb3PropertyGetAnnotation.ftl に追加することです。

   @${pojo.importType("org.hibernate.annotations.Cascade")}(value=${pojo.importType("org.hibernate.annotations.CascadeType")}.ALL) 

全体として、@OneToMany のメソッド テンプレートは次のようになります。

<#elseif c2h.isCollection(property)>
   ${pojo.generateCollectionAnnotation(property, cfg)}
   @${pojo.importType("org.hibernate.annotations.Cascade")}(value=${pojo.importType("org.hibernate.annotations.CascadeType")}.ALL)                    
<#else> 

結果は次のようになります。

  @OneToMany(fetch=FetchType.LAZY, mappedBy="person")
  @Cascade(value=CascadeType.ALL)                    
  public Set<ContactInformation> getContactInformations() {
       return this.contactInformations;
  }             
于 2012-09-06T07:27:28.687 に答える