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

Hibernate SQL中LocalTime减Duration查询报错求修正

问题修正方案

错误原因

SQL执行顺序中,WHERE子句的解析早于SELECT子句,因此无法直接引用SELECT里定义的别名(如startTime1、endTime1),这是触发Could not interpret path expression 'aStartTime'异常的核心原因。

修正后的查询代码

将WHERE子句中引用别名的部分替换为对应的SUBTIME表达式即可,同时可以简化EXISTS子查询的返回字段(无需返回具体列,EXISTS仅判断存在性):

@Query(
    value = """
        SELECT EXISTS (
            SELECT 1
            FROM appointment a 
            WHERE a.date = ?1 
              AND (
                (SUBTIME(a.startTime, a.mobileAdditionalDuration) < ?2 AND SUBTIME(a.endTime, a.mobileAdditionalDuration) > ?2) 
                OR 
                (SUBTIME(a.startTime, a.mobileAdditionalDuration) < ?3 AND SUBTIME(a.endTime, a.mobileAdditionalDuration) > ?3)
              )
        )
    """
)
fun checkIfAppointmentAlreadyExistAtThisTime(date: LocalDate, start: LocalTime, end: LocalTime): Boolean

额外注意事项

  • 确保数据库支持SUBTIME函数(如MySQL),如果使用其他数据库(如PostgreSQL),需替换为对应时间操作函数,例如PostgreSQL可使用a.startTime - a.mobileAdditionalDuration(需保证mobileAdditionalDuration存储为INTERVAL类型)。
  • 确认mobileAdditionalDuration字段在数据库中的存储类型与SUBTIME函数参数兼容,若映射为数值类型(如秒数),需先转换为时间间隔格式(例如MySQL中用SEC_TO_TIME(a.mobileAdditionalDuration))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:02:10