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

使用复合主键时,如何在Hibernate中查询指定事件的参与者?

解决嵌入式复合主键的HQL查询问题

这问题我碰到过好多次啦——你之所以查不了pe.eventId,核心原因是eventId并不是ParticipantEntity直接拥有的字段,它是嵌套在你定义的ParticipantPrimaryKey这个**嵌入式主键(@EmbeddedId)**对象里的,所以必须通过实体里的pKey字段来访问它。

正确的HQL写法

把你的查询语句改成这样就能正常执行了:

select pe from ParticipantEntity pe where pe.pKey.eventId = ?

更推荐的命名参数写法

为了提升代码可读性、避免参数位置错位的问题,建议用命名参数代替占位符:

select pe from ParticipantEntity pe where pe.pKey.eventId = :eventId

之后在代码中设置参数时,对应使用:

query.setParameter("eventId", targetEventId);

关键注意点

  • 要保证ParticipantPrimaryKey类里的字段名确实是eventId(HQL对大小写敏感),如果你的主键类里定义的是event_id或者其他名称,HQL里要同步改成pe.pKey.event_id。
  • 因为使用了@EmbeddedId,所有主键相关的属性都必须通过这个嵌入式主键对象来访问,不能直接跳过它引用内部字段,这是JPA/HQL的规范要求哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:04