我必须@Override一个抽象函数并提供一个字符串数组(为我的数据表定义可搜索字段):
@Override
public String[] getQueryFields() {
return new String[] { "email", "firstname", "lastname", "lastLogin"};
}
当我查看代码时,我可以想象我只是引用一个类并注释JPA列字段,例如通过@Searchable表示此功能并构建我的数组:
@Column
@Getter
@Setter
...
@Searchable
private String email;
有办法解决吗?
最佳答案
当然,您可以使用反射做任何您想做的事情。但您也应该尝试探索其他选择。这是我刚写的一个粗略的例子。它将为您提供由@AnAnnotation
注释的字段。
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface AnAnnotation {
}
public class AnnotExample {
@AnAnnotation
private String b;
@AnAnnotation
private String c;
public static void getAnnotatedFields(final Class clazz) {
clazz.getAnnotation(AnAnnotation.class);
final Field[] declaredFields = clazz.getDeclaredFields();
for (final Field field : declaredFields) {
final AnAnnotation annotation2 = field.getAnnotation(AnAnnotation.class);
if (annotation2 != null) {
System.out.println(field.getName());
}
}
}
public static void main(final String[] args) {
AnnotExample.getAnnotatedFields(AnnotExample.class);
}
}