当前位置: 首页 > 知识库问答 >
问题:

Join fetch:“查询指定了Join fetching,但所获取关联的所有者不在选择列表中”

淳于乐池
2023-03-14

我有以下代码:

public class ValueDAO  implements BusinessObject<Long> {

    private Long id;
    private String code;
    private ClassDAO classDAO ;
        ....
}

public List<String> getCodesByCodeClass(Long classId) {
    String select = "select distinct val.code from ValueDAO val left " +
        "join fetch val.classDAO ";
    String where = "where val.classDAO.id = ? order by val.code";

    return getHibernateTemplate().find(select + where, classId);
}

它引发了一个异常:

 org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list

结果我只想得到代码

共有1个答案

张权
2023-03-14

加入fetchval.classDAO. b表示“在获取val时,还要获取链接到valclass DAO”。但是您的查询不会获取val。它只获取val.code。所以获取没有意义。只需删除它,一切都会好起来:

select distinct val.code from ValueDAO val 
left join val.classDAO classDAO
where classDAO.id = ? 
order by val.code

但也有一些注意事项:

  • 执行左连接,然后添加一个检索,如classDAO。id= 意味着连接实际上是一个内部连接(因为classDAO不能为null,同时具有给定的ID)
  • 将实体命名为XxxDAO非常令人困惑。DAO和实体根本不是一回事

鉴于上述情况,可以将查询重写为

select distinct val.code from ValueDAO val 
where val.classDAO.id = ? 
order by val.code
 类似资料:
  • 问题内容: 我正在选择两个id列,但指定了错误: 一些代码: 如何解决错误,我在做什么错? 问题答案: 使用常规而不是(顺便说一句,默认情况下): 正如错误消息告诉您的那样,在这里没有意义,因为它是一种性能提示,会迫使人们急切加载收藏。

  • 我选择两个id列,但指定错误: 一些代码: 如何修复错误,我做错了什么?

  • 问题内容: 我有两个mysql表。 第一个称为“选择”,由id,user_id和widget_id字段组成。 另一个称为“小部件”,包括widget_id等几项内容。 我创建了一个过滤器,以便用户可以显示他/她选择的小部件,也可以显示他/她没有选择的小部件。对于他选择的人,我使用以下方法: 但是,我不知道如何显示他/她没有选择的内容。这不起作用(显示所有内容): 我该怎么做呢? 问题答案: 使用N

  • 问题内容: 我有很多表具有相同的列“ customer_number”。我可以通过查询获取所有这些表的列表: 问题是如何从所有这些表中获取具有特定客户编号的所有记录,而不对每个表运行相同的查询。 问题答案: 我假设您要自动执行此操作。两种方法。 SQL生成SQL脚本 。 PLSQL 使用动态sql的类似想法:

  • 问题内容: 获取Oracle中所有表的列表? 问题答案: 假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT ANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表) )。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模

  • 本文向大家介绍MySQL 选择所有列(*),包括了MySQL 选择所有列(*)的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果 您可以通过执行以下操作从一个连接的一个表中选择所有列: 最佳实践*除非正在调试或获取row(s)关联数组,否则不要使用,否则架构更改(ADD / DROP /重新排列列)可能会导致讨厌的应用程序错误。另外,如果提供结果集中所需的列列表,MySQL的查询计划程序通