2016-12-27 11 views
1

Я пытаюсь создать следующую аннотацию динамически с помощью javassist. Я не мог найти способ добавить массив аннотаций ({@JoinColumn, @JoinColumn}) в качестве члена аннотации javassist. Любые приговоры?Массив аннотаций как член аннотации javassist

@ManyToOne 
@JoinColumns({ 
     @JoinColumn, 
     @JoinColumn 
}) 
private Parent parent; 

Вот несколько ссылок на создание простых аннотаций.

AnnotationAttribute
Dynamically Adding annotations
Annotations at runtime

ответ

0

Вот я, отвечая на мой собственный вопрос.

/* 
* parentAnnotation, @JoinColumns object 
* memberName, "value" 
* memberValue, {@JoinColumn,...} object 
*/ 
public void addMemberToAnnotation(Annotation parentAnnotation String memberName, Object memberValue){ 
    if(memberValue instanceof Annotation[]){ 
     ArrayList<AnnotationMemberValue> members = new ArrayList<AnnotationMemberValue>(); 
     AnnotationMemberValue annotationValue; 
     for (Annotation a:(Annotation[])memberValue) { 
      annotationValue = new AnnotationMemberValue(cb.getCpool()); 
      annotationValue.setValue(a); 
      members.add(annotationValue); 
     } 
     ArrayMemberValue arrayValue = new ArrayMemberValue(cb.getCpool()); 
     arrayValue.setValue(members.toArray(new MemberValue[0])); 
     parentAnnotation.addMemberValue(memberName, arrayValue); 
    } else if (...){ 
     // Other cases 
    } 
}