2015-10-07 26 views
2

我想要簡單的使用QueryDSL查詢MongoDB。我現在只是使用Spring Data來訪問MongoDB。無論我嘗試什麼,我都無法創建Q類。第一次在春季使用QueryDSL的MongoDB

這是我到目前爲止嘗試過的。

issue.java

@QueryEntity 
@Document(collection = "issues") 
public class Issue { 

    private @Id long id; 

    private String body; 
    private long prodId; 
    private long timestamp; 
    public Issue() {} 
    ... 

IssueRepository.java

@RepositoryRestResource(collectionResourceRel = "issues", path = "issues") 
public interface IssueRepository extends MongoRepository<IssueModel, String>, 
QueryDslPredicateExecutor<IssueModel>{ 

    public List<IssueModel> findByBody(String body); 
    public List<IssueModel> findByProdId(long prodId); 

} 

的pom.xml

<dependencies> 
     <dependency> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk</artifactId> 
      <version>1.10.12</version> 
      <exclusions> 
       <exclusion> 
        <artifactId>jackson-core</artifactId> 
        <groupId>com.fasterxml.jackson.core</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>jackson-databind</artifactId> 
        <groupId>com.fasterxml.jackson.core</groupId> 
       </exclusion> 
       <exclusion> 
        <artifactId>jackson-annotations</artifactId> 
        <groupId>com.fasterxml.jackson.core</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> 
      </dependency> --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-remote-shell</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <exclusions> 
       <exclusion> 
        <artifactId>tools</artifactId> 
        <groupId>com.sun</groupId> 
       </exclusion> 
      </exclusions> 
      <groupId>com.basho.riak</groupId> 
      <artifactId>riak-client</artifactId> 
      <version>2.0.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.plexus</groupId> 
      <artifactId>plexus-utils</artifactId> 
      <version>3.0.15</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-mongodb</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.googlecode.json-simple</groupId> 
      <artifactId>json-simple</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-redis</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>redis.clients</groupId> 
      <artifactId>jedis</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>net.kencochrane.raven</groupId> 
      <artifactId>raven-logback</artifactId> 
      <version>6.0.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-neo4j</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-mongodb</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-apt</artifactId> 
      <version>3.6.8</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-mongodb</artifactId> 
      <version>3.6.8</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 

      <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/gen-sources/java</outputDirectory> 
          <processor>com.mysema.query.apt.QuerydslAnnotationProcessor</processor> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

當我運行maven build-sources沒有任何反應。當我改變POM.xml來使用com.mysema.query.apt.morphia.MorphiaAnnotationProcessor來代替時,我得到了Entity的classnotfound異常。

我在網上找不到一本簡單的教程。

回答

3

更改插件處理器org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor

彈簧數據蒙戈提供了一個定製APT處理器以生成 元模型,而不是在QueryDSL提供的一個,它會掃描 彈簧具體@Document代替嗎啡的特定的註釋。

然後運行mvn compile生成您指定的輸出目錄元模型。

您也可以刪除@QueryEntity註釋。