【问题标题】:Retrieve emebedded or component using Hibernate Criteria api使用 Hibernate Criteria api 检索嵌入式或组件
【发布时间】:2010-12-01 02:37:37
【问题描述】:

我将这个类映射为一个实体,我们称它为 Person。 Person 与 Address 具有嵌入/组件关系。我在使用会返回地址对象的条件时遇到问题。 我试过这个:

Criteria.createCriteria(Address.class)

这不起作用。我想我需要通过实体,但我需要某种投影?

Criteria.createCriteria(Person.class).<<what goes here???>>

建议?

【问题讨论】:

    标签: hibernate criteria


    【解决方案1】:

    组件的生命周期由其所有者控制;它们不被视为关联。因此,您无法从查询中单独检索组件。但是,您可以在条件中使用它。

    假设您的“地址”类映射为“人员”中的“地址”,您可以执行以下操作:

    Criteria.createCriteria(Person.class)
     .add(Restrictions.eq("address.street", street));
    

    【讨论】:

    • 好的,但是我怎么可以做一个 HQL 并直接检索地址呢?为什么不同样适用于查询?
    • 因为 HQL 具有 Criteria API 所没有的功能。现在,如果您真的想不惜一切代价单独返回您的地址,您可以为基于个人的标准创建一个投影列表,该列表将包含地址的每个属性(仅此而已)并将AliasToBeanResultTransformer 应用于结果。但这很令人头疼,而且没有什么可显示的;我会选择完整的 Person 并在 java 代码中提取地址(如果这是你需要的)。或者使用 HQL。
    【解决方案2】:

    这是如何在休眠中检索或引用嵌入对象的属性。

    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
                    Parent.class,"parent");
    criteria.createAlias("embeddedObjectFieldName", "parent.embeddedObjectFieldName");
    
    criteria.setProjection(Projections.projectionList()
                    .add(Projections.groupProperty("parent.propertyOne"))
                    .add(Projections.max("embeddedObjectFieldName.embeddedobjectproperty")));
    

    希望以上澄清

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 2014-05-04
      • 2015-04-01
      • 1970-01-01
      • 2018-07-24
      • 2011-10-27
      • 2014-12-11
      • 2018-06-03
      相关资源
      最近更新 更多