我知道“Object”是所有对象的超类,但为什么Hibernate不直接返回类型“classname”呢?
为什么Hibernate ORM会让我们进行演员表?
特别是,我读过Hibernate返回一个“代理类”,所以可以使用延迟加载来节省内存(和时间),如果我们是明确地执行强制转换,我们怎样才能获得“代理类” “真正的”类(不是代理)???
我的意思是,如果我有一个Country类:
public class Country {
private int id;
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
使用Hibernate我做:
Country country = (Country) session.get(Country.class, 1);
如果我只是向国家/地区投了一个演员,我如何获得“代理人”?
答案 0 :(得分:0)
Hibernate 5 Session的get方法的签名是......
<T> T get(Class<T> entityType, Serializable id);
...这意味着它会返回正确的类,并且不会让你施放它。这意味着别的东西是错误的&#34;用你的代码。您使用的是旧版本的Hibernate吗?
它可能会返回一个代理,在这种情况下,该代理实际上将是您的实体类型的子类。
答案 1 :(得分:0)
Casting不是将某种类型的对象转换为不同类型的对象的运行时进程。
Casting只是建议编译器返回的对象实际上可以被视为更具体的(如你的情况)。多亏了你可以使用更详细的方法/ api。
编译并运行代码后,所有taht信息都已过时。