0
鉴于代码示例无效代码:Spring Roo的1.2.5生成嵌套注释
final ClassOrInterfaceTypeDetailsBuilder cidBuilder = new ClassOrInterfaceTypeDetailsBuilder(javaTypeDetails);
...
FieldMetadataBuilder field = ...;
...
final AnnotationMetadataBuilder newAnnotationMetadata = new AnnotationMetadataBuilder(JpaJavaType.JOIN_TABLE);
newAnnotationMetadata.addStringAttribute("name", joinTableName);
List<NestedAnnotationAttributeValue> valueList;
AnnotationMetadataBuilder nestedAnnotationMetadata;
if (joinColumnName != null) {
valueList = new ArrayList<NestedAnnotationAttributeValue>(1);
nestedAnnotationMetadata = new AnnotationMetadataBuilder(JpaJavaType.JOIN_COLUMN);
nestedAnnotationMetadata.addStringAttribute("name", joinColumnName);
valueList.add(new NestedAnnotationAttributeValue(new JavaSymbolName("value"), nestedAnnotationMetadata.build()));
newAnnotationMetadata.addAttribute(new ArrayAttributeValue<NestedAnnotationAttributeValue>(
new JavaSymbolName("joinColumns"), valueList));
}
if (inverseJoinColumnName != null) {
valueList = new ArrayList<NestedAnnotationAttributeValue>(1);
nestedAnnotationMetadata = new AnnotationMetadataBuilder(JpaJavaType.JOIN_COLUMN);
nestedAnnotationMetadata.addStringAttribute("name", inverseJoinColumnName);
valueList.add(new NestedAnnotationAttributeValue(new JavaSymbolName("value"), nestedAnnotationMetadata.build()));
newAnnotationMetadata.addAttribute(new ArrayAttributeValue<NestedAnnotationAttributeValue>(
new JavaSymbolName("inverseJoinColumns"), valueList));
}
field.addAnnotation(newAnnotationMetadata.build());
这将产生对现场无效的批注,如:
@JoinTable(name = "NOTICE_EVENT_RECEIVER_X", joinColumns = { @javax.persistence.JoinColumn("NOTICE_EVENT_ID") }, inverseJoinColumns = { @javax.persistence.JoinColumn("NOTICE_RECEIVER_ID") })
正如你看到的,属性“名称“的JoinColumn注释缺失,代码不可编译。 我做错了什么或者是Roo错误?
UPD:肯定有roo错误:当注释属性的数量是1时 - 假定它总是一个“值”属性。这个假设是错误的!解决方法是指定一个更多的属性。例如(在我的场景中)“可空”。我这种情况下生成的代码是可编译的。