2010-01-06 25 views
1

使用Hibernate,如何使用泛型加載實體?使用加載/使用泛型

Curretly我做:

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

在NHibernate中,使用泛型,我可以這樣做:

session.Get<Entity>(123); 

什麼是Hibernate的相同呢?

回答

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

爲了增加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); 

這應該給你的事情是如何投出更好的主意。

+0

這意味着一個'靜態'會話。你不想那樣做。 – BalusC 2010-01-07 00:09:49

+0

是的。我將該方法視爲一種功能,這意味着將會話作爲參數添加進去:public static get(Session session,Class cls,Long id); – 2010-01-07 20:12:47

+0

其實你不需要方法調用中的''。 – whiskeysierra 2010-01-10 18:42:30