我想获取我的实体属性的获取方法的名称。我只有数据库列名,也可以获取属性。因此,要么从列名要么从属性获取吸气剂。我有以下内容:
@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
也许有一个休眠技巧可以做到这一点。预先感谢。
答案 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。