Java 为什么要冬眠';s get(classname,index)返回一个对象,而不是一个";“类名”;实例?

Java 为什么要冬眠';s get(classname,index)返回一个对象,而不是一个";“类名”;实例?,java,hibernate,Java,Hibernate,我知道“Object”是所有对象的超类,但是为什么Hibernate不直接返回类型“classname”呢 为什么冬眠ORM让我们做演员 特别是,我读到Hibernate返回一个“代理类”,因此可以使用延迟加载来节省内存(和时间),如果我们明确地对“真实”类(而不是代理)进行转换,我们如何获得一个“代理类” 我的意思是,如果我有一个国家班: public class Country { private int id; private String name; public

我知道“Object”是所有对象的超类,但是为什么Hibernate不直接返回类型“classname”呢

为什么冬眠ORM让我们做演员

特别是,我读到Hibernate返回一个“代理类”,因此可以使用延迟加载来节省内存(和时间),如果我们明确地对“真实”类(而不是代理)进行转换,我们如何获得一个“代理类”

我的意思是,如果我有一个国家班:

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);

如果我只是向国家/地区投了一票,我怎么能得到一个“代理”?

Hibernate 5会话的get方法的签名是

<T> T get(Class<T> entityType, Serializable id);
T get(类entityType,可序列化id);
。。。这意味着它返回正确的类,并且不会使您强制转换它。这意味着你的代码有其他“错误”。您使用的是旧版本的Hibernate吗


它可能会返回一个代理,在这种情况下,代理将实际上是实体类型的子类。

Hibernate 5会话的get方法的签名是

<T> T get(Class<T> entityType, Serializable id);
T get(类entityType,可序列化id);
。。。这意味着它返回正确的类,并且不会使您强制转换它。这意味着你的代码有其他“错误”。您使用的是旧版本的Hibernate吗


它可能返回一个代理,在这种情况下,该代理实际上是实体类型的一个子类。

强制转换不是一个运行时过程,它将特定类型的对象转换为不同类型的对象

Casting只是通知编译器,返回的对象实际上可以被视为更具体的对象(就像在您的例子中一样)。因此,您可以使用更详细的方法/api


一旦代码被编译并运行,所有taht信息都将过时。

转换不是一个将特定类型的对象转换为不同类型对象的运行时过程

Casting只是通知编译器,返回的对象实际上可以被视为更具体的对象(就像在您的例子中一样)。因此,您可以使用更详细的方法/api


一旦代码被编译并运行,所有的taht信息都将过时。

我非常确定代理类扩展了您的类我非常确定代理类扩展了您的类明白了!非常感谢。我原以为cast实际上是在“转换”某些东西,但正如您所说的,只是建议编译器如何处理对象(无论是哪个类),这就更有意义了!知道了!非常感谢。我原以为cast实际上是在“转换”某些东西,但正如您所说的,只是建议编译器如何处理对象(无论是哪个类),这就更有意义了!