2017-03-01 49 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

相關問題