hibernate的泛型get方法

时间:2013-06-29 08:14:02

标签: java hibernate generics get

我正在尝试使用hibernate通过某个id从数据库加载对象的通用get方法。在我开始之前,该方法看起来像:

public static Object getObjectFromDatabase(Class c, long id) {
    Transaction newTransaction = getSession().beginTransaction();
    Object result = getSession().get(c, id);

    newTransaction.commit();


    return result;
}

然后我尝试使用以下代码获得该方法的通用性:

public static <T> T getObjectFromDatabase(Class<T> c, long id) {
    Transaction newTransaction = getSession().beginTransaction();
    T result = getSession().get(c, id);

    newTransaction.commit();


    return result;
}

不幸的是行

   T result = getSession().get(c, id);

发出错误:类型不匹配:无法从Object转换为T

我知道我可以使用显式强制转换为T

   T result = (T) getSession().get(c, id);

但有没有办法避免这种演员?

谢谢

1 个答案:

答案 0 :(得分:2)

否 - get(Class, Serializable)中的Session方法仅被声明为返回Object。它本身并不是一般的方法,这就是为什么你需要以某种方式进行演员表。

您可以使用Class.cast方法使投射更安全:

T result = c.cast(getSession().get(c, id));

这将在执行时进行适当检查的演员表,而不仅仅是做一个“假装”演员表而不会做任何事情。