Получить имя столбца в jpa - PullRequest
6 голосов
/ 27 мая 2010

У меня есть фабрика запросов, которая принимает имя столбца в качестве атрибута для поиска этого столбца. Прямо сейчас я передаю имя столбца в виде строки, так что это довольно жестко. Если имя столбца изменяется в аннотации объекта, эта «скрытая зависимость» разрушается.

Есть ли в jpa способ получить настоящее имя столбца и сделать его доступным во время компиляции, чтобы я мог использовать его в запросах?

Ответы [ 2 ]

6 голосов
/ 27 мая 2010

Конечно, всегда есть размышления об аннотациях.Предположим, у вас есть типичное определение столбца 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, но ничто не мешает вам перенести его на уровень поля, применив отражение к полю.

1 голос
/ 29 марта 2013

Это немного поздно, я знаю. Ответ Топчефа верен, но есть несколько других факторов, которые необходимо учитывать, если вы хотите, чтобы это работало для произвольных классов сущностей. Я добавляю их в случае, если кто-то сталкивается с этим ответом в веб-поиске:

  • Аннотация класса AttributeOverride может переопределить столбец, указанный в аннотации Column.
  • Если стратегия наследования JOINED, столбец может находиться в другой таблице, даже если таблица не указана с аннотацией Column.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...