如何在不返回根实体的情况下返回hibernate集合实体

时间:2014-09-13 22:28:25

标签: java sql hibernate hibernate-criteria

我想从Hibernate获取一组对象(Set< SheetConfig>)而不获取主要对象(WorkbookConfig)。

基础表格如下:

  

workbook_config - > workbook_config_sheet_join< - sheet_config

如果我只是在我的SQL实用程序中运行它,那么成功的SQL语句如下所示:

SELECT DISTINCT sheet_config_id FROM sheet_config AS sc 
    LEFT JOIN workbook_config_sheet_join AS wcsj 
       ON sc.sheet_config_id = wcsj.sheet_config_id
    LEFT JOIN workbook_config AS wc 
       ON wc.workbook_config_id = wcsj.workbook_config_id
WHERE wc.group_id ="1"
ORDER BY sheet_name;

我想在不使用HQL的情况下正确执行此操作。

我的不成功尝试导致了这一点:

@SuppressWarnings("unchecked")
public List<SheetConfig> findAllForUser() {

    List<SheetConfig> sheetConfigs = null;
    Session session = getSession();

    Criteria crit = session.createCriteria(WorkbookConfig.class)
            .add(Restrictions.in(GROUP, getGroupsForUser()))
            .setFetchMode(SHEET_CONFIGS, FetchMode.JOIN);

    sheetConfigs = (List<SheetConfig>) crit.list();

    return sheetConfigs;
}

这仍然给了我WorkbookConfigs,但我想在一次传递中做的是获取SheetConfigs。我花了一天时间在互联网上试图找到关于Hibernate API的连贯解释,我还没有找到我认为可以解决相当普遍要求的问题。我总是可以退出并完成Java中的大部分工作,但似乎我应该能够使用Hibernate API来完成这项工作。我感谢任何帮助,而且,如果您可以推荐一个不只是简单地查询集合,而是返回它们的参考,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您是否在Criteria上查看了setProjection方法? 使用setProjection方法可以从执行的查询中选择属性或对象。

Hibernate Criteria documentation