使用load / get使用泛型

时间:2010-01-06 17:36:09

标签: java hibernate

使用Hibernate,如何使用泛型加载实体?

Curretly我在做:

Entity e = (Entity) session.load(Entity.class, 123);

在NHibernate中,使用泛型,我可以这样做:

session.Get<Entity>(123);

Hibernate的等价物是什么?

2 个答案:

答案 0 :(得分:4)

不幸的是,Java不支持Reified Generics

你能做的最好的事情就是用另一种方便的方法把它包起来,不再需要施放:

public <T> T get(Class<T> cls, Long id) {
    return cls.cast(session.load(cls, id));
}

可以按如下方式使用:

Entity e = get(Entity.class, 123);

答案 1 :(得分:1)

要添加到BalusC的答案,您可以更加明确地调用通用包装器方法。所以,如果包装器方法属于GenericSession类:

public class GenericSession {

    private GenericSession() {}

    public static <T> T get(Class<T> cls, Long id) {
        return cls.cast(session.load(cls, id));
    }
}

您可以这样称呼它:

Entity e = GenericSession.<Entity>get(Entity.class, 123);

这可以让你更好地了解事情的演变方式。