私は注釈付きのこの休止状態のクラスを持っています:
@Entity
public class SimponsFamily{
@Id
@TableGenerator(name = ENTITY_ID_GENERATOR,
table = ENTITY_ID_GENERATOR_TABLE,
pkColumnName = ENTITY_ID_GENERATOR_TABLE_PK_COLUMN_NAME,
valueColumnName = ENTITY_ID_GENERATOR_TABLE_VALUE_COLUMN_NAME)
@GeneratedValue(strategy = GenerationType.TABLE, generator = ENTITY_ID_GENERATOR)
private long id;
...
}
クラスのすべてのidフィールドにそのように注釈を付けるわけではないので、カスタム注釈を作成しようとしました。
@TableGenerator(name = ENTITY_ID_GENERATOR,
table = ENTITY_ID_GENERATOR_TABLE,
pkColumnName = ENTITY_ID_GENERATOR_TABLE_PK_COLUMN_NAME,
valueColumnName = ENTITY_ID_GENERATOR_TABLE_VALUE_COLUMN_NAME)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface EntityId {
@GeneratedValue(strategy = GenerationType.TABLE, generator = ENTITY_ID_GENERATOR)
public int generator() default 0;
@Id
public long id() default 0;
}
クラスでこの注釈を使用できるようにします。
@Entity
public class SimponsFamily{
@EntityId
private long id;
...
}
TYPE RetentionPolicy をサポートしていないため、フィールド レベルで@Id
およびアノテーションを記述する必要があります。@GeneratedValue
このソリューションはうまくいくようです。
私の質問:
カスタム アノテーション (および値) のフィールド レベルのアノテーションは、EntityId アノテーションの使用法にどのように転送されますか?
カスタム注釈で設定したデフォルト値はどうですか? 使用時に属性を指定しないため、それらが使用されますか?
注釈のフィールド レベルで注釈を使用するのは好ましい方法ですか?