使用Hibernate,如何使用泛型加载实体?
Curretly我在做:
Entity e = (Entity) session.load(Entity.class, 123);
在NHibernate中,使用泛型,我可以这样做:
session.Get<Entity>(123);
Hibernate的等价物是什么?
答案 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);
这可以让你更好地了解事情的演变方式。