使用Azure CosmosDB时无@Entity注解无法生成QueryDSL Q类怎么办
方案1:新增@QueryEntity注解(无侵入快速适配)
直接在所有标注了@Container的实体类上额外添加QueryDSL提供的@QueryEntity注解,APT处理器会自动识别该注解生成对应Q类,无需修改现有处理器配置。
修改后的实体类示例:
import com.azure.spring.data.cosmos.core.mapping.Container; import com.querydsl.core.annotations.QueryEntity; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.GeneratedValue; @Container(containerName = "user") @QueryEntity public class UserEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; private Integer age; private String profession; // 省略getter/setter }
方案2:自定义注解处理器(无需修改实体类)
如果不想给每个实体类额外加注解,可以自定义APT处理器,将@Container加入到实体识别规则中:
步骤1:编写自定义处理器
import com.azure.spring.data.cosmos.core.mapping.Container; import com.querydsl.apt.jpa.JPAAnnotationProcessor; import javax.annotation.processing.SupportedAnnotationTypes; import java.lang.annotation.Annotation; import java.util.Set; @SupportedAnnotationTypes("com.azure.spring.data.cosmos.core.mapping.Container") public class CosmosAnnotationProcessor extends JPAAnnotationProcessor { @Override protected Set<Class<? extends Annotation>> getEntityAnnotations() { Set<Class<? extends Annotation>> annotations = super.getEntityAnnotations(); annotations.add(Container.class); return annotations; } }
步骤2:修改pom.xml中APT插件配置
将原来的com.querydsl.apt.jpa.JPAAnnotationProcessor替换为自定义处理器的全类名:
<plugin> <groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <!-- 替换为自定义处理器的全路径类名 --> <processor>com.yourpackage.CosmosAnnotationProcessor</processor> </configuration> </execution> </executions> </plugin>
注意事项
- 执行
mvn clean compile即可触发Q类生成,生成的Q类默认与实体类同包 - 项目中需确保已引入
spring-boot-starter-data-cosmosdb依赖,否则@Container注解无法被正常识别
内容的提问来源于stack exchange,提问作者Gitesh kumar Jha
相关产品推荐
相关产品推荐

