2016-04-01 8 views
1

私は自分のカスタムIDジェネレーターを休止状態で使用できるようにしたいが、エンティティごとにいくつかの注釈が煩雑にならないようにしたい。デフォルトでハイバネートでカスタムキージェネレーターを使用する方法

例:

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator") 
@GenericGenerator(name = "XyzIdGenerator", 
     strategy = "com.mycompany.myapp.id.BigIntegerSequenceGenerator", 
     parameters = { 
      @Parameter(name = "sequence", value = "xyz_id_sequence") 
     }) 

たくさんあります。私はそれを設定したいところです。hibernateが "@Id"と表示した場合、それはデフォルトで私のジェネレータを起動してidに割り当てます。

答えて

0

私が通常行う方法は、共有される注釈付き変数を含むスーパークラスを作成して、エンティティを拡張させることです。例:

@MappedSuperclass 
public class PersistableEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator") 
    @GenericGenerator(name = "XyzIdGenerator", 
      strategy = "com.mycompany.myapp.id.BigIntegerSequenceGenerator", 
      parameters = { 
        @Parameter(name = "sequence", value = "xyz_id_sequence") 
      }) 
    protected Long id; 

    // ... 
} 

@Entity 
public class Abc extends PersistableEntity {} 

@MappedSuperclassは、ここで重要なのは:

は、そのマッピング情報、それを継承 エンティティに適用されるクラスを指定します。マップされたスーパークラスには別のテーブル が定義されていません。

+0

もう1つの問題は、同じシーケンスジェネレータを使用するすべてのテーブルで、数字の重複がないことです。これは良いことですが、他の問題(任意に大きなインデックス値が非常に速く増加するなど)が発生する可能性があります。それは、それが正常よりも少ないので、他の人が維持することがより困難になる可能性があります。 –

+0

すべてのアノテーションをダンプするIDEマクロを追加して、それをすばやく簡単にするのはなぜですか? –

+0

実際に私はIDのためにこの "パターン"を使用していませんが、作成/削除の日付などのいくつかの他のフィールドのために使用していません。 – dambros

関連する問題