Java hibernate的通用get方法
我试图获得一个通用的get方法,用hibernate以特定的id从数据库中加载一个对象。在我开始之前,这个方法看起来像: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
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));