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
相关产品推荐
相关产品推荐

