为什么Hibernate只检索ID列的值?

时间:2013-02-11 19:48:59

标签: hibernate hql

我没有详细说明,因为我几乎可以肯定它是关于配置的东西,而不是与hibernate版本有关的东西,但你只需要询问你是否需要更多东西=)

问题是:如果我执行这样的HQL,可能会出现什么问题:

    Query query = em.createQuery("select foo from Foo foo");
    List<Foo> foos = query.getResultList();

Hibernate在数据库中检索带有id但是所有其他列为空的Foo对象,我看到它们被通知了吗?

想象一下Foo是:

    @Entity
    @Table(name="FOO")
    public class Foo implements Serializable {

        @Id
        @column(name="F_ID")
        private long id;

        @column(name="F_COD")
        private String cod;

        //setters and getters
        ...
    }

问题是,如果我稍后使用其中一个foos的知情ID执行此操作,则它既不会得到整个对象!:

    Foo f = entityManager.find(Foo.class, foo.getId());

为什么它像entityManager.getReference()而不是entityManager.find()?!

如果我这样做:

    Query query = em.createQuery("select foo.id, foo.cod from Foo foo");
    List<Foo> foos = query.getResultList();

他们是丢失的列值!但结果列表有对象而不是Foos。

我疯了,我认为它必须是配置的东西。懒惰的获取或类似的东西。

一些有经验的开发人员有一些想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将您的课程映射为“fetch = FetchType.EAGER”,但是,我不推荐这样的实践,因为您的系统会变慢。

所以,我建议你在你的查询中使用join fetch。

有关详细信息,请参阅:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-joins