2009-05-28 4 views
2

엔티티리스트 (Class)를 취하고 계산을하는 메소드가있다.Hibernate에서 createCriteria() 결과를 얻는다.

public void do(List<Class<?> entities) { 
    for (Class<?> entity : entities) { 
     List<?> list = session.createCriteria(entity).list(); 
     for (Object o : list) { 
      System.out.println(o.getClass().getSimpleName() + " " + o.getId()); 
     } 
    } 
} 

가 거기에 내가 o의 ID를 얻을/액세스 할 수있는 방법 : 여기 내 요구를 설명하는 것은 방법의 간단한 개요 (의사 코드)인가?

답변

0

모든 엔티티에 같은 이름의 속성이 없으면 리플렉션을 사용하여 해당 속성의 getter를 호출 할 수 있습니다. 당신의 아이디의 정수가 아닌 경우

public interface EntityWithId { 
    Integer getId(); 
    void setId(Integer id); 
} 

: 서로 다른 모든 이름 일 경우에, 당신은 아마이 인터페이스를 구현할 수 많은 비판하지만, 모든 엔티티 클래스를 얻을 수 있습니다하는 NoSuchMethodException

+0

getId() 메소드가 있음을 보장 할 수 있으며 '예외'가 발생할 위험이 있습니다. – nimcap

1

음을 얻을 것 인터페이스가 될 수있을 수 있습니다 : 어쨌든

public interface EntityWithId<T> { 
    T getId(); 
    setId(T id); 
} 

public class Entity implements EntityWithId<String> { 
    private String id; 

    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    . 
    . 
    . 
} 

, 당신이 모든 엔티티의 ID를 얻을 싶어 왜 표시되지 않습니다, 그것은 도니는 다르게, 이상한 요구 사항에 대한 이상한 솔루션입니다.

+0

지금까지 거의 정확히 했었지만 필요한 것을하기위한 대안을 찾았습니다. 하지만 일반적으로 매핑 된 모든 엔티티 클래스는 빈 마커 인터페이스를 구현합니다. – araqnid