// Add annotations to field
final List<AnnotationMetadataBuilder> annotations = new ArrayList<AnnotationMetadataBuilder>();
// Add @Column annotation
final AnnotationMetadataBuilder columnBuilder = new AnnotationMetadataBuilder(
COLUMN);
columnBuilder.addStringAttribute(NAME, column.getEscapedName());
if (includeNonPortable) {
columnBuilder.addStringAttribute("columnDefinition",
column.getTypeName());
}
// Add length attribute for Strings
int columnSize = column.getColumnSize();
if (columnSize < 4000 && fieldType.equals(JavaType.STRING)) {
columnBuilder.addIntegerAttribute("length", columnSize);
}
// Add precision and scale attributes for numeric fields
if (columnSize > 0 && JdkJavaType.isDecimalType(fieldType)) {
columnBuilder.addIntegerAttribute("precision", columnSize);
int scale = column.getScale();
if (scale > 0) {
columnBuilder.addIntegerAttribute("scale", scale);
}
}
// Add unique = true to @Column if applicable
if (column.isUnique()) {
columnBuilder.addBooleanAttribute("unique", true);
}
annotations.add(columnBuilder);
// Add @NotNull if applicable
if (column.isRequired()) {
annotations.add(new AnnotationMetadataBuilder(NOT_NULL));
}
// Add JSR 220 @Temporal annotation to date fields
if (fieldType.equals(DATE) || fieldType.equals(CALENDAR)) {
final AnnotationMetadataBuilder temporalBuilder = new AnnotationMetadataBuilder(
TEMPORAL);
temporalBuilder.addEnumAttribute(VALUE, new EnumDetails(
TEMPORAL_TYPE, new JavaSymbolName(column.getJdbcType())));
annotations.add(temporalBuilder);
final AnnotationMetadataBuilder dateTimeFormatBuilder = new AnnotationMetadataBuilder(
DATE_TIME_FORMAT);
if (fieldType.equals(DATE)) {
dateTimeFormatBuilder.addStringAttribute("style", "M-");
}
else {
dateTimeFormatBuilder.addStringAttribute("style", "MM");
}
if (fieldName.getSymbolName().equals(CREATED)) {
columnBuilder.addBooleanAttribute("updatable", false);
}
annotations.add(dateTimeFormatBuilder);
}
// Add @Lob for CLOB fields if applicable
if (column.getJdbcType().equals("CLOB")) {
annotations.add(new AnnotationMetadataBuilder(LOB));
}
final FieldMetadataBuilder fieldBuilder = new FieldMetadataBuilder(
getId(), Modifier.PRIVATE, annotations, fieldName, fieldType);
if (fieldName.getSymbolName().equals(CREATED)) {