Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate的通用get方法_Java_Hibernate_Generics_Get - Fatal编程技术网

Java hibernate的通用get方法

Java hibernate的通用get方法,java,hibernate,generics,get,Java,Hibernate,Generics,Get,我试图获得一个通用的get方法,用hibernate以特定的id从数据库中加载一个对象。在我开始之前,这个方法看起来像: public static Object getObjectFromDatabase(Class c, long id) { Transaction newTransaction = getSession().beginTransaction(); Object result = getSession().get(c, id); newTransac

我试图获得一个通用的get方法,用hibernate以特定的id从数据库中加载一个对象。在我开始之前,这个方法看起来像:

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

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

   T result = (T) getSession().get(c, id);
但是有没有办法避免这种情况呢

谢谢

否-会话中的
get(Class,Serializable)
方法只声明返回
对象
。它本身不是一个泛型方法,这就是为什么您需要以某种方式执行强制转换

您可以使用以下方法使强制转换更安全:

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

这将在执行时执行正确检查的强制转换,而不仅仅是执行“假装”的强制转换,实际上没有任何作用。

谢谢您的回答!这就是我想要的:)有什么原因吗?我唯一想到的是Hibernate是在Java中引入泛型之前创建的。但是他们仍然可以添加功能。@h4nek:恐怕我不知道。
T result = c.cast(getSession().get(c, id));