Java 使用load/get和泛型
在Hibernate中,如何使用泛型加载实体 目前我正在做:Java 使用load/get和泛型,java,hibernate,Java,Hibernate,在Hibernate中,如何使用泛型加载实体 目前我正在做: Entity e = (Entity) session.load(Entity.class, 123); 在NHibernate中,使用泛型,我可以: session.Get<Entity>(123); Hibernate的等价物是什么?不幸的是,Java还不支持 您所能做的最好的事情是用另一种方便的方法将其包装起来,以消除强制转换的需要: public <T> T get(Class<T> c
Entity e = (Entity) session.load(Entity.class, 123);
在NHibernate中,使用泛型,我可以:
session.Get<Entity>(123);
Hibernate的等价物是什么?不幸的是,Java还不支持 您所能做的最好的事情是用另一种方便的方法将其包装起来,以消除强制转换的需要:
public <T> T get(Class<T> cls, Long id) {
return cls.cast(session.load(cls, id));
}
不幸的是,Java还不支持 您所能做的最好的事情是用另一种方便的方法将其包装起来,以消除强制转换的需要:
public <T> T get(Class<T> cls, Long id) {
return cls.cast(session.load(cls, id));
}
要添加到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);
这会让您更好地了解事物是如何被转换的。要添加到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);
这会让你更好地了解事物是如何被转换的。这意味着一个静态会话。你不想那样,真的。我将该方法视为一个函数,这意味着将会话添加为一个参数:publicstaticgetsession,Class cls,Long id;实际上,在方法调用中不需要。你不应该需要它,但是如果你不把它放在那里,一些编译器会抱怨。这意味着一个静态会话。你不想那样,真的。我将该方法视为一个函数,这意味着将会话添加为一个参数:publicstaticgetsession,Class cls,Long id;实际上,您不需要在方法调用中使用。您不应该使用它,但是如果您不将它放在那里,一些编译器会抱怨。