final String metadataIdentificationString) {
Validate.notNull(javaType, "Java type required");
Validate.notNull(memberDetails, "Member details required");
Validate.notBlank(metadataIdentificationString, "Metadata id required");
final MethodMetadata idAccessor = memberDetails
.getMostConcreteMethodWithTag(IDENTIFIER_ACCESSOR_METHOD);
if (idAccessor == null) {
return null;
}
final FieldMetadata idField = CollectionUtils
.firstElementOf(persistenceMemberLocator
.getIdentifierFields(javaType));
if (idField == null) {
return null;
}
final JavaType idType = persistenceMemberLocator
.getIdentifierType(javaType);
if (idType == null) {
return null;
}
registerDependency(idAccessor.getDeclaredByMetadataId(),
metadataIdentificationString);
registerDependency(idField.getDeclaredByMetadataId(),
metadataIdentificationString);
final MethodParameter entityParameter = new MethodParameter(javaType,
JavaSymbolName.getReservedWordSafeName(javaType));
final MethodParameter idParameter = new MethodParameter(idType, idField
.getFieldName().getSymbolName());
final MethodMetadata versionAccessor = memberDetails
.getMostConcreteMethodWithTag(VERSION_ACCESSOR_METHOD);
final MemberTypeAdditions persistMethod = layerService
.getMemberTypeAdditions(metadataIdentificationString,
PERSIST_METHOD.name(), javaType, idType,
LAYER_POSITION, entityParameter);