如何从列名获取getter方法?

时间:2019-03-26 14:03:21

标签: java hibernate mapping

我想获取我的实体属性的获取方法的名称。我只有数据库列名,也可以获取属性。因此,要么从列名要么从属性获取吸气剂。我有以下内容:

@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 :(得分:0)

您可以使用反射来访问所有方法,并检查列名是否匹配:

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;
}

当然,这要求注释必须出现在getter上,而不是字段或setter上。

此函数返回带有匹配注释的Method

答案 1 :(得分:0)

getter方法使用@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。