12

フィールドレベルでアノテーションを付けたテーブルからHibernateドメインクラスを生成するにはどうすればよいですか?Hibernate Toolsプロジェクトを使用し、データベースのテーブルからドメインクラスを生成しました。生成されたクラスには、フィールドレベルではなく、getterメソッドにアノテーションが付けられています。フィールドに注釈が付けられたドメインクラスを生成する方法を教えてください。アノテーションをメソッドレベルからフィールドレベルに移動するために、Eclipse / IDEAなどで利用できるリファクタリング機能はありますか?

あなたの助けと時間を感謝します。

4

3 に答える 3

19

手順は次のとおりです。

  1. Eclipseフォルダー内で検索を実行して「hibernate-tools.jar」を割り当てます。たとえば、次の場所にあります。 C:\eclipse\plugins\org.hibernate.eclipse_3.4.1.xxx\lib\tools

  2. 一時フォルダに抽出します(WinRarはこれを実行できます)たとえば、次のように抽出します[Your Project]\template

  3. [Your Project] \ template \ pojoフォルダーの下に、「Ejb3FieldGetAnnotation.ftl」という名前のファイルを作成します

    このファイルは実際には「Ejb3PropertyGetAnnotation.ftl」のコピーですが、このファイルは(プロパティではなく)すべてのフィールドを繰り返すループに配置されるため、「property」という単語はすべて「field」に置き換えられます。この投稿にファイルの内容を含めます

  4. プロパティレベルの注釈を削除します。ファイル「PojoPropertyAccessors.ftl」で、削除またはコメントアウトします

    <#include "GetPropertyAnnotation.ftl"/>
    
  5. フィールドレベルの注釈を追加します。ファイル「PojoFields.ftl」に次のように追加します。

    <#include "Ejb3FieldGetAnnotation.ftl"/>
    ${pojo.getFieldModifiers(field)} ... 
    
  6. Javaエンティティを生成する場合は、[カスタムテンプレートを使用]を選択し、テンプレートフォルダを指定します。この場合、[あなたのプロジェクト]\templateになります

    ==================================================================================
    Ejb3FieldGetAnnotation.ftl
    ==================================================================================
    
    <#if ejb3>
    <#if pojo.hasIdentifierProperty()>
    <#if field.equals(clazz.identifierProperty)>
     ${pojo.generateAnnIdGenerator()}
    <#-- if this is the id property (getter)-->
    <#-- explicitly set the column name for this property-->
    </#if>
    </#if>
    
    <#if c2h.isOneToOne(field)>
    ${pojo.generateOneToOneAnnotation(field, cfg)}
    <#elseif c2h.isManyToOne(field)>
    ${pojo.generateManyToOneAnnotation(field)}
    <#--TODO support optional and targetEntity-->    
    ${pojo.generateJoinColumnsAnnotation(field, cfg)}
    <#elseif c2h.isCollection(field)>
    ${pojo.generateCollectionAnnotation(field, cfg)}
    <#else>
    ${pojo.generateBasicAnnotation(field)}
    ${pojo.generateAnnColumnAnnotation(field)}
    </#if>
    </#if>
    

それがあなたのために働くことを願っています。

于 2012-05-29T15:36:44.080 に答える
1

私は5年以上前から回答を読むのに多くの時間を費やしましたが、その方法を理解していませんでした(特に、EclipseではなくIntellijで作業している場合)。だから私はそれを見つけました、ここにあります、そしてそれは簡単です:

Intellij では:

  1. このコンテンツを使用orm.xmlして、同じフォルダーにファイルを作成しますpersistence.xml
<?xml version="1.0" encoding="UTF-8"?>
    <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                     version="2.0">
        <persistence-unit-metadata>
            <persistence-unit-defaults>
                <access>FIELD</access>
            </persistence-unit-defaults>
        </persistence-unit-metadata>
    </entity-mappings>
  1. これで pojo を生成できます (永続化マッピングの生成 -> データベース スキーマ別 -> テーブルなどを選択し、「JPA アノテーションの生成」にチェックを入れることを忘れないでください)

あなたのエンティティにはフィールド注釈があります!

@Entity
@Table(name = "user", schema = "public", catalog = "my_db")
public class User {
    @Id
    @Column(name = "id")
    private Integer id;
...
}
于 2016-05-03T12:53:58.913 に答える
0

現在、カスタム テンプレートを使用する必要があります。これを実装するためのより多くの参照と例があります: https://forum.hibernate.org/viewtopic.php?f=6&t=1003858&p=2429868#p2429868

于 2010-05-06T19:05:15.770 に答える