Spring Data MongoDB继承父类后@Document指定集合名失效问题
看起来你遇到的问题是@Document指定的集合名没有被Spring Data MongoDB识别,反而默认用了类名作为集合名。我来帮你排查几个常见的原因和对应的解决办法:
1. 检查审计注解的包路径是否正确
你的父类AbstractAuditEntity使用了@EntityListeners(AuditingEntityListener.class),但如果这个注解和AuditingEntityListener是来自JPA包(比如javax.persistence.EntityListeners或org.springframework.data.jpa.domain.support.AuditingEntityListener),会和MongoDB的文档实体产生冲突——Spring可能会把ConsumerEntity当成JPA实体处理,直接忽略MongoDB的@Document注解。
解决办法:
替换审计相关的导入为MongoDB专属的类:
import org.springframework.data.mongodb.core.mapping.EntityListeners; import org.springframework.data.mongodb.core.mapping.event.AuditingEntityListener; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.time.Instant; @Getter @Setter @EntityListeners({AuditingEntityListener.class}) public abstract class AbstractAuditEntity implements Serializable { @CreatedBy @NotNull private Long createdBy; @LastModifiedBy @NotNull private Long updatedBy; @CreatedDate @NotNull private Instant createdDate; @LastModifiedDate @NotNull private Instant updatedDate; }
同时在Spring Boot主类或配置类上添加@EnableMongoAuditing来启用MongoDB的审计功能:
@SpringBootApplication @EnableMongoAuditing public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
2. 确认实体类被Spring正确扫描
如果ConsumerEntity所在的包不在主应用类(带@SpringBootApplication的类)的同级或子包下,Spring会扫描不到这个实体类,自然也不会处理@Document注解。
解决办法:
在主应用类上添加扫描路径配置:
@SpringBootApplication @EnableMongoAuditing @ComponentScan(basePackages = "com.yourproject.package") @EnableMongoRepositories(basePackages = "com.yourproject.package.repository") public class YourApplication { // ... }
3. 检查是否有全局配置覆盖集合名
查看你的application.properties或application.yml文件,有没有配置类似以下的全局集合名参数——这会直接覆盖@Document中的自定义配置:
# 若存在此配置请删除或注释,除非你需要统一所有集合名 spring.data.mongodb.collection=default-collection
4. 移除不必要的JPA依赖(若仅使用MongoDB)
如果你的项目只需要MongoDB,但引入了spring-boot-starter-data-jpa依赖,Spring会自动启用JPA相关配置,干扰MongoDB实体的处理逻辑。
解决办法:
在pom.xml(Maven)或build.gradle(Gradle)中移除JPA相关的依赖项。
按照以上步骤排查后,@Document(collection = "consumer")应该就能正常生效,MongoDB中会生成名为consumer的集合。
内容的提问来源于stack exchange,提问作者Amit Patel

