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

Spring Boot实体类用Lombok出现cannot find symbol错误求助

问题:Lombok生成的Setter方法无法调用

更新说明

该问题似乎与Lombok的使用相关

我编写了一个Java实体类:

import java.time.OffsetDateTime;
import java.util.Set;
import java.util.UUID;
import jakarta.persistence.*;
import lombok.*;
import org.cnr.plantvocdb.enums.LeafHabitus;
import org.cnr.plantvocdb.enums.PlantsRanks;
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Builder
@Table(name = "plants_voc")
public class PlantVocEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.UUID)
    @Column(name="id", length = 36, nullable = false, updatable = false)
    private UUID id;

    @Column(name="ipni", length = 50)
    private String ipniCode;

    // @Column(name="full_name_plain", length = 50, nullable = false)
    @Column(name="full_name_plain", length = 50)
    private String fullNamePlain;

    @Column(name="full_name_no_authors_plain", length = 20)
    private String fullNameNoAuthorsPlain;

    @Column(name="name", length = 20)
    private String name;

    @Column(name="family", length = 20)
    private String family;

    @Column(name="genus", length = 20)
    private String genus;

    @Column(name="species", length = 20)
    private String species;

    @Column(name="valid_nomenclature")
    private boolean validNomenclature;

    @Column(name="rank")
    @Enumerated(EnumType.STRING)
    private PlantsRanks rank;

    @Column(name="leaf_habitus")
    @Enumerated(EnumType.STRING)
    private LeafHabitus leafHabitus;

    @OneToMany(mappedBy = "plantVocEntity")
    private Set<PlantEmitterEntity> emitter;

    @ElementCollection
    @Column(name="synonyms")
    private Set<String> synonyms;

    @Column(name="created_datetime_utc", updatable = false) // creation_datetime_utc
    private OffsetDateTime createdDatetimeUTC;

    @Column(name="updated_datetime_utc")  // last_modified_datetime_utc
    private OffsetDateTime updatedDatetimeUTC;

}

随后在Service类中创建该实体类实例,尝试使用Setter方法赋值时出现错误:

import org.cnr.plantvocdb.dto.RequestPlantVocDTO;
import org.cnr.plantvocdb.dto.ResponsePlantVocDTO;
import org.cnr.plantvocdb.entity.PlantVocEntity;
import org.cnr.plantvocdb.repository.PlantsVocRepository;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.OffsetDateTime;
import java.time.ZoneOffset;

@Service
public class PlantsVocService {

    private final PlantsVocRepository repository;
    private final ModelMapper mapper;


    @Autowired
    public PlantsVocService(PlantsVocRepository repository, ModelMapper mapper) {
        this.repository = repository;
        this.mapper = mapper;

    }

    public ResponsePlantVocDTO CreateNewPlantVoc(RequestPlantVocDTO plant){
        PlantVocEntity p = new PlantVocEntity();
        p.setFamily("Hola");

        return null;
    }
}

错误截图

以下是pom.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.cnr</groupId>
    <artifactId>plantvocdb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>plantvocdb</name>
    <description>Plant VOC emitter DataBase</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>23</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- dependencies added from Alessandro -->

        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>3.2.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

解决方案

1. 统一Lombok版本配置

当前pom.xml中注解处理器未指定Lombok版本,需和依赖中的版本保持一致:
在properties中添加版本:

<properties>
    <java.version>23</java.version>
    <lombok.version>1.18.34</lombok.version> <!-- 或最新稳定版 -->
</properties>

然后修改注解处理器配置:

<annotationProcessorPaths>
    <path>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
    </path>
</annotationProcessorPaths>

2. 启用IDE的注解处理器

  • IntelliJ IDEA:打开设置 > 插件,确保Lombok插件已启用;再打开设置 > 构建、执行、部署 > 编译器 > 注解处理器,勾选启用注解处理。
  • Eclipse:安装Lombok插件后,进入项目属性,在Java Compiler > Annotation Processing中启用注解处理。

3. 清理重建项目

执行Maven命令:

mvn clean install

或在IDE中执行Clean + Rebuild操作,确保Lombok生成的字节码被正确编译。

4. 验证Setter方法生成情况

查看target/classes目录下编译后的PlantVocEntity.class文件,确认setFamily方法是否存在。若不存在,说明Lombok未正确生成方法,需重新检查配置。

5. 适配Java 23版本

Java 23属于较新版本,建议使用Lombok 1.18.34及以上版本,避免兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:54:53