2017-03-01 11 views
1

私はクラス(休止状態実体)からのフィールドのリストを取得しようとします。Java。リフレクションによってnull値を許可されないフィールドを取得するには?

エンティティ:非静的フィールドを取得するための

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; 
} 

しかし、私は唯一の非NULL可能非静的フィールドを取得する必要があります。つまり、@NotNull注釈フィールドと@JoinColumn注釈フィールドをパラメータ "nullable = false"で取得する必要があります。

field.isAnnotationPresent(NotNull.class) 

しかし、私はパラメータで@JoinColumnためのフィールドを確認することができますか見当がつかない:@NotNullため

チェックは簡単です。 どうすればいいですか?誰かが私を助けることができますか?

答えて

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

関連する問題