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

Spring Boot3迁移+Hibernate6.3.1后JPA查询方法验证失败求助

解决Hibernate 6.3.1.Final中JPQL类型不匹配报错

问题根源

报错提示Cannot compare left expression of type 'java.util.UUID' with right expression of type 'r.s.c.model.metric.LoadProfile',核心原因是JPQL的JOIN条件类型不匹配:

  • lp.loadProfileId是UUID类型(LoadProfile的主键)
  • pi.outcome是LoadProfile实体类型
    直接将两者做相等比较,在Hibernate 6的严格类型校验下触发错误——Hibernate 6对JPQL的语法和类型检查比旧版本更严格。

正确的JPQL写法

方式1:通过实体关联JOIN(符合JPA规范)

直接利用实体间的关联关系,将LoadProfile实体与ProfileInteraction的outcome实体关联:

@Query("SELECT lp.loadProfileId FROM LoadProfile lp JOIN ProfileInteraction pi ON lp = pi.outcome WHERE lp.structureId = :structureId")
Set<UUID> findLoadProfileOutcomeIdsByStructureId(@Param("structureId") UUID structureId);

方式2:通过实体主键字段比较

如果要显式用主键字段对比,需要引用pi.outcome的loadProfileId属性:

@Query("SELECT lp.loadProfileId FROM LoadProfile lp JOIN ProfileInteraction pi ON lp.loadProfileId = pi.outcome.loadProfileId WHERE lp.structureId = :structureId")
Set<UUID> findLoadProfileOutcomeIdsByStructureId(@Param("structureId") UUID structureId);

补充说明

你之前重构的版本未解决问题,因为JOIN条件仍为lp.loadProfileId = pi.outcome,类型不匹配的核心问题没修正,只需修改JOIN条件即可修复报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:55:09