Hibernate 带连接的HQL准则

Hibernate 带连接的HQL准则,hibernate,Hibernate,我有一个用例,可以使用完整实体中的一个子集来显示实体列表。我所采取的方法是创建一个EntityList类,其中只包含要显示在列表中的字段。此类映射到与完整实体相同的表,但仅包含字段的子集 使用HQL,我想根据完整实体中的字段过滤返回的EntityList。在下面的示例中,我希望Entity的description字段(在表中,但不在EntityList类中)上过滤EntityList 如果我直接针对表编写SQL,它将如下所示: Select IThreePhaseMotorList.* f

我有一个用例,可以使用完整实体中的一个子集来显示实体列表。我所采取的方法是创建一个EntityList类,其中只包含要显示在列表中的字段。此类映射到与完整实体相同的表,但仅包含字段的子集

使用HQL,我想根据完整实体中的字段过滤返回的EntityList。在下面的示例中,我希望Entity的description字段(在表中,但不在EntityList类中)上过滤EntityList

如果我直接针对表编写SQL,它将如下所示:

Select IThreePhaseMotorList.* 
  from IThreePhaseMotorList JOIN IThreePhaseMotor ON  
      IThreePhaseMotorList.id = IThreePhaseMotor.id
  where IThreePhaseMotor.Description like 'test%';
在HQL中是否有这样做的方法

我所采取的方法是创建一个EntityList类,其中只包含要显示在列表中的字段。此类映射到与完整实体相同的表,但仅包含字段的子集


这是问题的根源。不要那样做。只需使用完整的实体进行查询。加载一些不需要的列通常不会对性能产生任何显著影响。如果确实如此,那么只需执行一个只选择所需列的查询。

谢谢您的建议。它确实会影响性能,因为结果集是通过web服务发送的,并且必须打包到XML中/从XML中取出。我不希望用SQL编写查询,因为这需要对列映射的代码进行大量维护,因此我的问题是,您不必从web服务返回实体列表。您可以简单地将查询返回的每个实体实例转换为一个DTO对象,其中只包含您希望整理并从web服务返回的数据。我在哪里建议使用SQL?HQL可用于返回属性,而不仅仅是实体:
例如,从foo foo join foo.bar中选择foo.id、bar.name。看见
Select IThreePhaseMotorList.* 
  from IThreePhaseMotorList JOIN IThreePhaseMotor ON  
      IThreePhaseMotorList.id = IThreePhaseMotor.id
  where IThreePhaseMotor.Description like 'test%';