I had originally assumed this was the reason.  But - maybe I'm missing something - but HivMetadata doesn't inherit from CommonMetadata, so I'm not sure how HivMetadata would expose the same ._Location class as the one used in CommonMetadata.  I get your point with enums, though enums _can_ implement interfaces, so you could do something like this:

public interface LocationBuilder {
    String getUuid();
    String getName();
    String getDescription();
    LocationBuilder(String uuid, String name, String description) { ... }
}

public enum CoreLocations implements LocationBuilder {
    UNKNOWN_LOCATION("8d6c993e-c2cc-11de-8d13-0010c6dffd0f", "Unknown Location", "An unknown location");
}

public enum HivLocations implements LocationBuilder {
   HIV_CLINIC_1("1b6c993e-c2cc-11de-8d13-0010c6dffd0f", "Hiv Clinic 1", "The first HIV clinic"),
   HIV_CLINIC_2("2c6c993e-c2cc-11de-8d13-0010c6dffd0f", "Hiv Clinic 2", "The second HIV clinic"),
} 

Then, in your install tools can do something like:

public void install(LocationBuilder locationBuilder) {
   Location location = new Location();
   location.setUuid(locationBuilder.getUuid());
   location.setName(locationBuilder.getName());
   location.setDescription(locationBuilder.getDescription());
   locationService.saveLocation(location);
}

Thoughts?