Я считаю, что функциональность генератора метамодели JPA действительно полезна для предотвращения ошибок при изменении имен столбцов. Было бы действительно здорово, если бы существовал какой-то более универсальный инструмент для создания метамоделей, который можно было бы указать на любой класс (или несколько пакетов), которые генерировали бы аналогичные классы метамоделей. Затем это можно использовать для создания ошибок компиляции, а не во время выполнения, когда что-то меняется:
public class SomeClass {
public int somePublicProperty;
public String someStringMethod() {
..
}
}
Это может создать класс метамодели, например:
public class SomeClass_ {
public static final FieldAttribute<SomeClass,Integer> somePublicProperty;
public static final MethodAttribute<SomeClass,String> somePublicMethod;
}
где FieldAttribute и MethodAttribute имеют полезные методы, подобные Attribute, для помощи в вызовах отражения (т. е. устраняют необходимость иметь голые строки):
Object someClassInstance = ...
Integer value = SomeClass_.somePublicProperty.get( someClassInstance );
// rather than
Integer value = someClassInstance.getClass().getDeclaredField( "somePublicProperty" ).get( someClassInstance );
Есть ли что-то подобное в настоящее время? В Java 8 есть небольшая поддержка, теперь мы можем делать ссылки на методы, но я бы хотел что-то более похожее на метамодель, если оно существует.