为什么hibernate的get(classname,index)返回一个对象而不是“classname”实例?

时间:2017-09-24 12:57:17

标签: java hibernate

我知道“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);

如果我只是向国家/地区投了一个演员,我如何获得“代理人”?

2 个答案:

答案 0 :(得分:0)

Hibernate 5 Session的get方法的签名是......

<T> T get(Class<T> entityType, Serializable id);

...这意味着它会返回正确的类,并且不会让你施放它。这意味着别的东西是错误的&#34;用你的代码。您使用的是旧版本的Hibernate吗?

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

答案 1 :(得分:0)

Casting不是将某种类型的对象转换为不同类型的对象的运行时进程。

Casting只是建议编译器返回的对象实际上可以被视为更具体的(如你的情况)。多亏了你可以使用更详细的方法/ api。

编译并运行代码后,所有taht信息都已过时。