【问题标题】:Hibernate: Projection of a many-to-one in a CriteriaHibernate:在标准中投影多对一
【发布时间】:2010-12-06 09:55:43
【问题描述】:

我最近第一次使用 hibernate Criteria API。

我试图做与此 HQL 等效的操作

"从任务 t 中选择 t.userTbl"

userTbl 属性是来自 Task 的多对一。 Task.userTbl 关系是惰性的。

所以我想出了这个

Criteria criteria = session.createCriteria( Task.class, "t" );
criteria.setProjection( Projections.property( "t.userTbl" ) );
List results = criteria.list();

不幸的是,这与 HQL 有所不同。

在 HQL 中,虽然 userTbl 关系在映射中设置为惰性,但 HQL 急切地获取并实现 UserTbl 的非代理对象。

但是,在标准中,我得到了我不想要的代理列表。我摆弄了 setFetchMode 但这似乎不是正确的事情。任何人都知道如何在标准中正确执行上述操作并像 HQL 一样获取非代理?

谢谢。

【问题讨论】:

    标签: hibernate criteria projection lazy-evaluation


    【解决方案1】:

    尝试在任务类和 userTbl 之间强制加入。

    【讨论】:

    • 尝试了以下但不幸的是没有工作。 Criteria criteria = session.create.criteria(Task.class, "t"); criteria.createAlias("t.userTbl", "u");标准.setProjection(Projections.property(“u”));列出结果 = session.list();挖掘代码我不得不得出结论,实体的投影是不可能的。不幸的是,HQL 没有编译为然后执行的 Criteria。这将确保 Criteria 提供与 HQL 相同/一致的功能,这很好。
    • 你能解释一下失败的原因吗?文档有投影示例:hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html
    猜你喜欢
    • 1970-01-01
    • 2013-07-21
    • 2013-08-14
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2021-08-16
    相关资源
    最近更新 更多