2017-03-01 36 views
1

我尝试从类(hibernate实体)获取字段列表。就像这样:Java。如何通过反射获得不可空字段?

实体:

用于获取非静态字段
public class A { 

    public static final Integer someValue = 1; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "a_id") 
    private Integer id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "a_b_id", nullable = true) 
    private List<B> b; 

    @NotNull 
    @Column(name = "a_c_id") 
    private C c; 

    ......................... 
} 

方法:

public static List<Field> getNonStaticFields(Class clazz) { 
    Field[] fields = clazz.getDeclaredFields(); 
    List<Field> fieldsList = new ArrayList<>(); 
    for (Field field : fields) { 
     if (!Modifier.isStatic(field.getModifiers())) { 
      fieldsList.add(field); 
     } 
    } 

    return fieldsList; 
} 

但我需要得到唯一的非空的非静态字段。这意味着我需要通过参数“nullable = false”获得带有@NotNull注释和@JoinColumn注释的字段。

检查@NotNull很简单:

field.isAnnotationPresent(NotNull.class) 

但我不知道我怎么能检查领域@JoinColumn与参数。 我该怎么办?有人能帮助我吗?

回答

1

对于注释JoinColumn,您只需要先用getAnnotation(Class<T> annotationClass)得到它,然后检查nullable()的值。然后

产生的过滤器可以是:

... 
if (!Modifier.isStatic(field.getModifiers())) { 
    // Add the field to the list only if it is annotated with NotNull 
    // or annotated with JoinColumn and nullable is false 
    JoinColumn jc; 
    if (field.isAnnotationPresent(NotNull.class) || 
     ((jc = field.getAnnotation(JoinColumn.class)) != null && !jc.nullable())) { 
     fieldsList.add(field); 
    } 
} 
.. 
+0

我会尝试此解决方案。感谢您的帮助! – Virkom

相关问题