我没有详细说明,因为我几乎可以肯定它是关于配置的东西,而不是与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。
我疯了,我认为它必须是配置的东西。懒惰的获取或类似的东西。
一些有经验的开发人员有一些想法吗?谢谢!
答案 0 :(得分:0)
您可以将您的课程映射为“fetch = FetchType.EAGER”,但是,我不推荐这样的实践,因为您的系统会变慢。
所以,我建议你在你的查询中使用join fetch。
有关详细信息,请参阅:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-joins