Как получить метод получения из имени столбца? - PullRequest
0 голосов
/ 26 марта 2019

Я хочу получить имя получателя моего объекта.У меня есть только имя столбца базы данных, и я также могу получить свойство.Таким образом, либо получение геттера из имени столбца или из свойства.У меня есть следующее:

@JoinColumn(name = "CurrencyId")
public Currency getCurrency() {
    return currency;
}

Я хочу, чтобы getCurrency () Как вы видите, имя столбца CurrencyId.Я хотел бы сделать что-то вроде:

Method method = getMethodFromColumnName(Class class, String columnName)
System.out.println("Getter is:" + method.getName())
Getter is: getCurrency

Может быть, есть хитрый трюк, чтобы сделать это.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

метод get аннотируется с помощью @JoinColumn (name = "CurrencyId"), поэтому, используя отражения в Java, вы можете искать метод, аннотированный с помощью @JoinColumn, или, конечно, вы можете создать другую аннотацию для этого самостоятельно, например:

Method[] methods=Class.forName("name of the entity").getDeclaredMethods();
for (Method method : m) {
                if (method.getAnnotation(JoinColumn.class) != null) {
                    System.out.println("Getter is:" + method.getName());
                }
                break;
            }

Конечно, вы можете создать собственную аннотацию для этого случая, но вы можете использовать JoinColumn.

0 голосов
/ 26 марта 2019

Вы можете использовать отражение, чтобы получить доступ ко всем методам и проверить, совпадает ли имя столбца:

Method getMethodFromColumnName(Class cls, String columnName) {
  for(Method m:cls.getMethods()){
    if(!m.getName().startsWith("get")) {
      //you can delete this if you don't want only getters
      continue;
    }
    JoinColumn annotation = m.getAnnotation(JoinColumn.class);
    if(annotation != null && annotation.name() != null){
      if(columnName.equals(annotation.name())){
        return m;
      }
    }
  }
  return null;
}

Конечно, для этого требуется, чтобы аннотация присутствовала на получателе, а не на поле или установщике.

Эта функция возвращает Method с соответствующей аннотацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...