2

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

问题是:如果我执行这样的 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
        ...
    }

问题是,如果我稍后使用其中一个 foo 的知情 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();

它们是丢失的列值!但结果列表有 Objects 而不是 Foos。

我要疯了,我认为它必须与配置有关。懒惰的取或类似的东西。

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

4

1 回答 1

0

你可以将你的类映射为“fetch=FetchType.EAGER”,但是,我不推荐这种做法,因为你的系统会变慢。

因此,我建议您在查询中使用 join fetch。

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

于 2013-08-14T14:27:06.007 回答