Java 通过循环列表从JPA元模型获取SingularAttribute
我有一个JPA元模型,从中检索属性Java 通过循环列表从JPA元模型获取SingularAttribute,java,jpa,Java,Jpa,我有一个JPA元模型,从中检索属性 @StaticMetamodel(Test.class) 公开课考试_{ 公共静态属性var1; 公共静态属性var2; 公共静态属性var3; } 我可以手动调用和使用它们: 测试变量1 测试变量2 测试变量3 但我如何通过循环浏览列表来做到这一点: List vars=new ArrayList(); 增加变量(“变量1”); 增加变量(“变量2”); 增加变量(“变量3”); 对于(int i=0;i
@StaticMetamodel(Test.class)
公开课考试_{
公共静态属性var1;
公共静态属性var2;
公共静态属性var3;
}
我可以手动调用和使用它们:
测试变量1
测试变量2
测试变量3
但我如何通过循环浏览列表来做到这一点:
List vars=new ArrayList();
增加变量(“变量1”);
增加变量(“变量2”);
增加变量(“变量3”);
对于(int i=0;i
如何使用stringvar
从元模型中获取属性
更新 我尝试使用java反射,正如在循环中所建议的那样,但没有成功:
//假设是
System.out.println(测试变量1);//com.example.entities.Test.var1
System.out.println(Test.var1.getType());//布尔值
//在列表中循环
类对象=测试类;
试一试{
Field=object.getDeclaredField(var);
field.setAccessible(true);//public static volatile javax.persistence.metamodel.SingularAttribute com.example.entities.Test.var1
System.out.println(字段);//com.example.entities.Test.var1
System.out.println(field.getType());//接口javax.persistence.metamodel.SingularAttribute
//但还是没有表情
}捕获(无此字段例外){
System.out.println(“错误”);
}
它不会返回正确的名称或类型(请参见代码中的输出注释)。在反射代码中,您直接使用字段,但这不是您要查找的静态SingularAttribute(Test.var1)值。您需要使用
field.get(null)
vars
列表已创建,但未填充。它是空的!使用反射@naXa抱歉我的坏我复制了错误的部分作为示例。。。我改正了。名单存档了!关于反射,这就是我尝试的(见更新)。现在我尝试使用getDeclaredField()
,但没有成功?任何进一步的提示?var.getJavaType()不起作用?@fg78nc没有这样的方法。但是无论如何,请检查正确的答案。thx的答案,这就是我要找的。
Field[] fields = Test_.class.getDeclaredFields();
for (Field field : fields) {
if (Modifier.isPublic(field.getModifiers())) {
// For Each Public Field
try {
Object obj = field.get(null); // Equivalent to Test_.var1 but you need to cast it
if (obj instanceof SingularAttribute) {
System.out.println(obj); // Equivalent to Test_.var1
System.out.println(SingularAttribute.class.cast(obj).getType()); // Equivalent to Test_.var1.getType()
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}