2009-05-28 52 views
2

我有一個方法,它需要一個實體列表(Class es)並進行一些計算。來形容這裏我需要的是方法的簡單輪廓(僞代碼):我可以訪問/獲取的o ID的方式休眠從createCriteria()得到Id結果

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

是嗎?

回答

0

除非您在所有實體上命名相同的屬性,否則可以使用反射來調用該屬性的getter。如果他們都是不同的命名的東西,那麼你會得到一個NoSuchMethodException

+0

我可以保證它有getId()方法,我冒着得到一個`Exception`的風險。 – nimcap 2009-05-28 17:41:57

1

好吧,也許會得到很多批評,但所有的實體類可以實現此接口:

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

如果你的ID是不是整數可能是該接口可以是:

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 2009-05-28 18:12:15