2014-03-05 55 views
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時 - 假定它總是一個「值」屬性。這個假設是錯誤的!解決方法是指定一個更多的屬性。例如(在我的場景中)「可空」。我這種情況下生成的代碼是可編譯的。

回答