我想从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来完成这项工作。我感谢任何帮助,而且,如果您可以推荐一个不只是简单地查询集合,而是返回它们的参考,我将不胜感激。
答案 0 :(得分:0)
您是否在Criteria上查看了setProjection方法?
使用setProjection
方法可以从执行的查询中选择属性或对象。