You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate JPA中TypedQuery是否支持嵌套使用多个自定义构造器?

问题解答

可以编写包含嵌套自定义构造器的TypedQuery,JPQL(Java持久化查询语言)原生支持SELECT new语法下的构造器嵌套使用,只要对应类存在匹配的构造方法,即可实现你需求里「同时返回关联id和自定义对象实例」的效果。

核心注意事项

  • 所有在构造器中用到的类都必须提供和参数顺序、参数类型完全匹配的公共构造方法:示例中example.Chapter类需要存在入参为(章节id对应类型、章节size对应类型)的公共构造,ChapterWithBookId类需要存在入参为(图书id对应类型、Chapter类实例)的公共构造,否则运行时会抛出构造方法未找到的异常。
  • 你给出的示例代码存在一处笔误:em.createQuery的第二个返回类型参数写为ChapterWithBookIds.class,多了末尾的s,需要和你要返回的ChapterWithBookId类保持一致,否则会出现类型不匹配错误。
  • 构造器传入的字段值类型必须和实体类对应字段的类型完全一致,避免触发不必要的类型转换异常。

修正后的参考代码

TypedQuery<ChapterWithBookId> query = em.createQuery(
  "SELECT new " + ChapterWithBookId.class.getName() + "(book.id, new example.Chapter(chapter.id, "
  + "chapter.size"
  + ")) "
  + "FROM " + Book.class.getName() + " AS book JOIN " + Chapter.class.getName() + " AS chapter WHERE "
  + "book.id IN :ids", ChapterWithBookId.class)
  .setParameter("ids", ids);

内容的提问来源于stack exchange,提问作者lasbr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:39:04