注释数组作为 javassist 注释成员
Array of annotations as a javassist annotation member
我正在尝试使用 javassist 动态创建以下注释。我找不到将注释数组 ({@JoinColumn, @JoinColumn}
) 添加为 javassist 注释成员的方法。有什么建议吗?
@ManyToOne
@JoinColumns({
@JoinColumn,
@JoinColumn
})
private Parent parent;
这里有一些构建简单注释的参考。
AnnotationAttribute
Dynamically Adding annotations
Annotations at runtime
我在这里回答我自己的问题。
/*
* 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
}
}
我正在尝试使用 javassist 动态创建以下注释。我找不到将注释数组 ({@JoinColumn, @JoinColumn}
) 添加为 javassist 注释成员的方法。有什么建议吗?
@ManyToOne
@JoinColumns({
@JoinColumn,
@JoinColumn
})
private Parent parent;
这里有一些构建简单注释的参考。
AnnotationAttribute
Dynamically Adding annotations
Annotations at runtime
我在这里回答我自己的问题。
/*
* 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
}
}