2017-09-20 1 views
1

Ich möchte eine Annotation für ein JPA-Entity-Feld erstellen, die einige andere Annotationen zusammenfasst. Dies ist die Anmerkung Ich mag würde erstellen:Java-Annotation, die andere Annotationen zusammenfasst

bei @Embedded
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

import javax.persistence.AttributeOverride; 
import javax.persistence.AttributeOverrides; 
import javax.persistence.Column; 
import javax.persistence.Embedded; 

@Target(value = {ElementType.FIELD, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Embedded 
@AttributeOverrides({ 
     @AttributeOverride(name = "createdAt", column = @Column(name = "created_at", columnDefinition = "TIMESTAMP WITH TIME ZONE")), 
     @AttributeOverride(name = "lastChangedAt", column = @Column(name = "last_changed_at", columnDefinition = "TIMESTAMP WITH TIME ZONE")), 
     @AttributeOverride(name = "lastChangedBy", column = @Column(name = "last_changed_by")), 
     @AttributeOverride(name = "createdBy", column = @Column(name = "created_by")) }) 
public @interface EmbeddAdministrativeData { 

} 

Aber das gibt einen Syntaxfehler, da das Ziel von @Embedded ist Field und Methode. Wenn ich @Embedded entferne und es separat verwende, wird die Annotation @EmbeddAdministrativeData ignoriert. Was wäre der richtige Weg, dies zu tun?

+1

Ich glaube nicht, dass ich folge. Du hast deine eigene Anmerkung erstellt und fragst, wie man Hibernate erkennt? Die Antwort, fürchte ich, ist, dass Sie das nicht können - es sei denn, Sie erstellen Ihre eigene Gabelung von Hibernate. – crizzis

Antwort

1

JPA 2.2 unterstützt "Meta-Annotationen" gemäß this link. Dann kommt es darauf an, ob Ihr JPA-Provider JPA 2.2 unterstützt oder nicht (den, den ich verwende, für den diese Dokumente beispielsweise sind).

+0

Genau das würde ich gerne machen. Siehe meinen Code oben. Aber '@ Embedded' gibt einen Syntaxfehler, weil sein Ziel Feld oder Methode ist. Und wenn ich nur '@AttributeOverrides ...' in meiner Meta-Annotation verwende, wird es zur Laufzeit ignoriert. – Alex

+0

Ihr Ziel ist nicht nur FIELD/METHOD in JPA 2.2, weshalb sie von einem gültigen JPA 2.2-Provider verwendet werden können. https://github.com/datanucleus/javax.persistence/blob/master/src/main/java/javax/persistence/Embedded.java#L49 –