2016-12-27 1 views
1

javassist를 사용하여 다음 주석을 동적으로 만들려고합니다. 어노테이션 배열 ({@JoinColumn, @JoinColumn})을 javassist 어노테이션 멤버로 추가하는 방법을 찾지 못했습니다. 성난 건가요?javassist 주석 멤버로 주석 배열

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

다음은 간단한 어노테이션을 작성하기위한 참고 자료입니다. Dynamically Adding annotations
Annotations at runtime

답변

0

AnnotationAttribute

여기 난 내 자신의 질문에 대답하고있다.

/* 
* 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 
    } 
}