2010-04-21 4 views
5

데이터베이스 테이블의 모든 열을 특성 (멤버 변수) 및 해당 getter 및 setter로 포함하는 Java 클래스가 있습니다.자바 클래스에서 속성 수를 얻는 방법은 무엇입니까?

이 클래스에서 열 수 (즉, 클래스의 속성 수)를 반환하는 getColumnCount()이라는 메서드를 갖고 싶습니다. 번호를 하드 코드하지 않고 어떻게 구현할 수 있습니까? 나는 이것에 대한 비평에 일반적이고 제안한다. 감사.

+1

리플렉션을 사용하면 그럴 수 있습니다.하지만 왜 그 번호를 알아야합니까? 나는 당신이하려는 일을하는 더 좋은 방법이있을 수 있다고 생각합니다. – Syntactic

답변

18

reflection API을 확인하십시오. 문제의 클래스가 실제로 순수 자바 빈즈 경우 (당신이 그것을 부르는 속성 또는 열) 다음과 같이 필드의 수를 얻을 수 있습니다 :

public int getColumnCount() { 
    return getClass().getDeclaredFields().length; 
} 

나는 그러나 높은이의 필요성에 의문을 제기. 이 접근법/해결책이 필요하다고 생각되는 기능적 요구 사항에 대해 좀 더 자세히 설명하면 더 나은 방법을 제안 할 수 있습니다.

+0

감사합니다. 추론에 관한 한, 주로 로깅을위한 것입니다 : 업데이트 중 필드에 이전 새 데이터를 추적 할 수 있도록 테이블의 열 수를 알아야합니다. 로깅 클래스가 로그 테이블에 삽입 할 행 수를 알고 있도록 열 개수가 필요합니다. – llm

+2

괜찮은 ORM API를 사용하는 경우 API 제공 방법을 사용하여 매핑 세부 정보를 파악할 수 있습니다. JPA와 good ol 'Hibernate가 그렇게 할 수 있습니다. – BalusC

+0

예. 불행히도 내가 작업하고있는 코드는 ORM API를 사용하지 않습니다. – llm

0

리플렉션을 사용하여 클래스의 메소드를 나열하고 이름이 정규 표현식 "^set.+$"과 일치하는 메소드를 계산합니다.

0

"DatabaseColumn"과 같은 주석을 만들고, 어떤 필드를 테이블 열에 매핑할지 사용하십시오. 필드 나 getter 메소드에 주석을 사용할 수 있습니다. 데이터베이스 테이블에서 사용되지 않는 임시 필드는 안전합니다.

// in this sample annotation used for getter methods 
public int getColumnCount() { 
    int count = 0; 
    Method[] methods = getClass().getDeclaredMethods(); 
    for (Method method : methods) { 
     if (method.isAnnotationPresent(DatabaseColumn.class)) { 
      count++; 
     } 
    } 
    return count; 
} 
관련 문제