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

Spring Data JPA生成错误ON子句致SQL查询失败

问题分析与解决方案

错误原因

你的User和Log实体仅标注了@Table注解,缺少JPA实体必需的@Entity注解。Spring Data JPA 3.0虽支持用Record作为实体,但必须通过@Entity明确标识,否则框架无法正确解析实体间的关联关系,进而生成了错误的SQL关联条件。

解决方案

1. 为实体Record添加@Entity注解

修改User和Log类,添加@Entity注解,让JPA正确识别实体及关联映射:

修改后的User类

@Entity
@Table("users")
public record User(

        @Id
        UUID id_user,

        @Nullable
        String name,

        @Nullable
        String email,

        String upn,

        boolean active,

        @Embedded(onEmpty = USE_NULL)
        UserSpecialPermissions permissions

) { (... code omitted ...) }

修改后的Log类

@Entity
@Table("logs")
public record Log(

        @Id
        UUID id_log,

        @Column("datetime")
        OffsetDateTime dateTime,

        @Nullable
        @ManyToOne
        @JoinColumn(name = "actor", referencedColumnName = "id_user")
        User actor,

        UUID device,

        @Nullable
        UUID method,

        @Enumerated(EnumType.ORDINAL)
        Result result

) { (... code omitted ...) }

2. 确保嵌入类标注@Embeddable

由于User中使用了@Embedded关联UserSpecialPermissions,该类必须标注@Embeddable才能被JPA正确解析:

@Embeddable
public record UserSpecialPermissions(
    boolean is_auditor,
    boolean is_enroller,
    boolean is_administrator
) {}

验证

添加注解后,Spring Data JPA会正确识别Log中的@ManyToOne关联,生成符合预期的SQL关联条件:ON "users"."id_user" = "logs"."actor",解决列不存在的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:30:53