Ich habe diese Hibernate Klasse mit Anmerkungen:Wie erstelle ich Meta-Annotationen auf Feldebene?
@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;
...
}
Da wird ich nicht dont jedes id Feld meiner Klassen auf diese Weise zu annotieren, habe ich versucht, einen benutzerdefinierten den Vermerk zu erstellen:
@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;
}
, so dass ich diese Anmerkung in meiner Klasse verwenden:
@Entity
public class SimponsFamily{
@EntityId
private long id;
...
}
ich schreibe, um die @Id
und die @GeneratedValue
Annotationen auf Feldebene, da sie die TYPE RetentionPolicy nicht unterstützen. Diese Lösung scheint zu funktionieren.
Meine Fragen:
Wie die Feldebene Anmerkungen in meinen benutzerdefinierten Anmerkungen werden (und Werte) meine Nutzung von EntityID Anmerkung übertragen?
Was ist mit den Standardwerten, die ich in meiner benutzerdefinierten Annotation eingestellt habe, werden sie verwendet, da ich bei der Verwendung keine Attribute festlege?
Es ist eine bevorzugte Möglichkeit, Annotationen auf Feldebene in Annotationen zu verwenden?
Meine Hoffnung war, dass ich ein Super vermeiden kann, aber vielleicht ist dies der Weg zu gehen ... vielleicht ist meine Frage eher ein generelles Annotationsproblem als ein Winterschlafproblem. Thx sowieso! – thilko