У меня есть фабрика запроса, которая берет имя столбца в качестве атрибута для поиска того столбца. Прямо сейчас я передаю название столбца как строка, таким образом, это - вид hardcoded. Если название изменений столбца в аннотации объекта, та "скрытая зависимость" разбивается.
Существует ли путь в jpa, чтобы получить настоящее имя столбца и иметь его в наличии во время компиляции, таким образом, я могу использовать его в запросах?
Конечно, всегда есть отражение в аннотациях. Предположим, у вас есть типичное определение столбца JPA:
@Basic(optional = true)
@Column(name = "MY_COLUMN_NAME_DESC", nullable = true, length = 255)
public String getDesc() {
return desc;
}
Затем проверка метода получения дает значение имени столбца (пример взят из здесь ):
Method method = ... //obtain entity object
Annotation[] annotations = method.getDeclaredAnnotations();
for(Annotation annotation : annotations){
if(annotation instanceof Column){
Column myAnnotation = (Column) annotation;
System.out.println("name: " + myAnnotation.name());
System.out.println("value: " + myAnnotation.value());
}
}
Пример предполагает доступ к свойству метода в JPA сущность, но ничто не мешает вам адаптировать ее к уровню поля, применив отражение к полю.