Hibernate从createCriteria()结果获取Id

时间:2009-05-28 17:25:47

标签: java hibernate

我有一个方法,它接受实体列表(Class es)并进行一些计算。在这里描述我的需求是最简单的方法概要(伪代码):

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?

3 个答案:

答案 0 :(得分:6)

session.getIdentifier(o)

答案 1 :(得分: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,这对于一个奇怪的要求来说是一个奇怪的解决方案,呵呵。

答案 2 :(得分:0)

除非您在所有实体上都具有相同的属性,否则您可以使用反射来调用该属性的getter。如果他们都被命名为不同的东西,那么你会得到一个NoSuchMethodException