2017-02-15 1408 views
1

我发现有一个像我的许多问题,但从来没有过的答案,使Querydsl春季启动项目。 这是我pom.xml依赖和插件:JpaRepository Querydsl:QCLASS不产生

<properties> 
     <querydsl.version>3.7.4</querydsl.version> 
    </properties> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.1.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jdbc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-core</artifactId> 
      <version>${querydsl.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-apt</artifactId> 
      <version>${querydsl.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-jpa</artifactId> 
      <version>${querydsl.version}</version> 
     </dependency> 



    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
      //added for QueryDsl 
      <plugin> 
       <groupId>com.mysema.maven</groupId> 
       <artifactId>maven-apt-plugin</artifactId> 
       <version>1.0</version> 
       <executions> 
        <execution> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>process</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>target/generated-sources</outputDirectory> 
          <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

     </plugins> 
    </build> 


</project> 

,这是我的实体:

@Entity 
@Table(name = "phone_table") 
public class Phone { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long phoneId; 
private String phoneName; 
private String phoneBrand; 
private String phoneManufacturer; 
... 

,这是库:

@Repository 
public interface MobileRepository extends JpaRepository<Phone,Long> ,QueryDslPredicateExecutor<Phone>{ 

} 

我的项目不跑,这是错误说Did not find a query class ir.mtajik.entities.QPhone for domain class ir.mtajik.entities.Phone而且原因是:无法创建QPhone类。我搜索了很多。有很多像我这样的问题,但答案不适用于我的情况。 我尝试这些:

  1. 选择了依赖和插件的版本相同
  2. 尝试使用@Document但它不工作,不知道往哪里放那。
  3. 我试图querydsl的许多版本,但在评论中提到一起,你还需要配置用于查询DSL Maven的易插件,所以在POM插件中添加该错误是相同
+0

QueryDSL和Spring Boot的版本可能会造成这个问题。 对查询dsl及其依赖项尝试spring引导1.4.4和3.7.4。 –

+0

@MuhammadFaisalHyder可惜没有。它不工作 – Kenji

回答

2

<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/java</outputDirectory> 
      <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor> 
     </configuration> 
    </execution> 
</executions> 

希望这有助于。 This Spring Article会帮助你。并且别忘了mvn clean install

还要确保Bean是基于XML或基于Java的EntityManager,Jpa供应商定义的,并指向您的Repo包。

+0

你确定abdout apt-maven-plugin不是maven-apt-plugin?你是什​​么意思关于mvn干净安装? – Kenji

+0

mvn clean install生成Q(实体类/ es)它是Maven命令。 maven-apt-plugin –

+0

好吧我把你的代码,而不是我的插件。他们是非常相同的。然后清理并安装maven。但错误仍然存​​在。 – Kenji

1

当我更换处理器时,它对我有效。

所以,你有它:

<configuration> 
     <outputDirectory>target/generated-sources</outputDirectory> 
     <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor> 
</configuration> 

将其更改为:

<configuration> 
     <outputDirectory>target/generated-sources</outputDirectory> 
     <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> 
</configuration> 

希望这有助于;)