Querydsl和Java与Mongodb的接口
我试图用querydsl和spring数据在我的mongodb数据库中查找结果,当我在MyDocument类中使用MyInterfaceImpl类型时,我得到了一些结果。如果我使用MyInterface, 我没有结果。使用MongoRepository,我还可以通过MyInterface获得结果。Java中的QueryDSL和接口有什么特别之处吗? 我错过什么了吗 我找到了以下帖子,但在MyInterface上使用或不使用@QuerySupertype仍然得到相同的结果:Querydsl和Java与Mongodb的接口,java,spring,mongodb,spring-data,querydsl,Java,Spring,Mongodb,Spring Data,Querydsl,我试图用querydsl和spring数据在我的mongodb数据库中查找结果,当我在MyDocument类中使用MyInterfaceImpl类型时,我得到了一些结果。如果我使用MyInterface, 我没有结果。使用MongoRepository,我还可以通过MyInterface获得结果。Java中的QueryDSL和接口有什么特别之处吗? 我错过什么了吗 我找到了以下帖子,但在MyInterface上使用或不使用@QuerySupertype仍然得到相同的结果: package com
package com.myapp.bean;
@QuerySupertype
public interface MyInterface {
public MyInterfaceImplBase getMyInterfaceImplBase();
public void setMyInterfaceImplBase(MyInterfaceImplBase myInterfaceImplBase);
public String getIdExterne();
public void setIdExterne(String idExterne);
}
MyInterfaceImpl:
package com.myapp.bean.subfolder;
...
@Document
public class MyInterfaceImpl implements MyInterface{
private MyInterfaceImplBase myInterfaceImplBase;
@Id
private String idExterne;
public MyInterfaceImplBase getMyInterfaceImplBase() {
return myInterfaceImplBase;
}
public void setMyInterfaceImplBase(MyInterfaceImplBase myInterfaceImplBase) {
this.myInterfaceImplBase = myInterfaceImplBase;
}
public String getIdExterne() {
return idExterne;
}
public void setIdExterne(String idExterne) {
this.idExterne = idExterne;
}
}
MyInterfaceImplBase.java:
package com.myapp.bean;
...
@Document
public class MyInterfaceImplBase {
@Id
private String internalId;
public String getInternalId() {
return internalId;
}
public void setInternalId(String internalId) {
this.internalId = internalId;
}
}
MyDocumentRepository.java:
package com.myapp.repository;
...
public interface MyDocumentRepository extends MongoRepository<MyDocument, String>, QueryDslPredicateExecutor<MyDocument> {
Collection<MyDocument> findByMyInterface(MyInterface myInterface);
}
当我运行MyServiceTest.java:booleanExpression=“myDocument.myInterface.idExterne=1”
以下是my pom.xml中的相关信息:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.9.4.RELEASE</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.1.4</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>4.1.4</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
<version>4.1.4</version>
</dependency>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/apt</outputDirectory>
<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.1.4</version>
</dependency>
</dependencies>
</plugin>
org.mongodb
mongo java驱动程序
3.3.0
org.springframework.data
spring数据mongodb
1.9.4.1发布
com.querydsl
querydsl jpa
4.1.4
com.querydsl
querydsl型芯
4.1.4
com.querydsl
querydsl mongodb
4.1.4
com.mysema.maven
aptmaven插件
1.1.3
过程
目标/生成源/apt
org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor
com.querydsl
querydsl公寓
4.1.4
我找到了答案。问题在于我的服务,我无法执行
QMyDocument.myDocument.myInterface.externalId.eq("1");
必须使用EntityPathBase的as方法铸造接口:
QMyDocument.myDocument.myInterface.as(MyInterfaceImpl.class).externalId.eq("1");
{ "_id" : ObjectId("58b09c55a7986c0ce0407a76"), "_class" : "com.myapp.bean.subfolder.MyDocument", "myInterface" : { "_class" : "com.myapp.bean.subfolder.MyInterfaceImpl", "_id" : "1", "myInterfaceImplBase" : { "_id" : "2" }}, "createdDate" : ISODate("2017-02-24T20:49:25.891Z") }
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.9.4.RELEASE</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.1.4</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>4.1.4</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
<version>4.1.4</version>
</dependency>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/apt</outputDirectory>
<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.1.4</version>
</dependency>
</dependencies>
</plugin>
QMyDocument.myDocument.myInterface.externalId.eq("1");
QMyDocument.myDocument.myInterface.as(MyInterfaceImpl.class).externalId.eq("1");