Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Querydsl和Java与Mongodb的接口_Java_Spring_Mongodb_Spring Data_Querydsl - Fatal编程技术网

Querydsl和Java与Mongodb的接口

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

我试图用querydsl和spring数据在我的mongodb数据库中查找结果,当我在MyDocument类中使用MyInterfaceImpl类型时,我得到了一些结果。如果我使用MyInterface, 我没有结果。使用MongoRepository,我还可以通过MyInterface获得结果。Java中的QueryDSL和接口有什么特别之处吗? 我错过什么了吗

我找到了以下帖子,但在MyInterface上使用或不使用@QuerySupertype仍然得到相同的结果:

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");