2017-02-13 9 views
0

com.querydslでQクラスを自動生成する際に問題があります。私は、com.query.dslとspring-boot-jpaの間に互換性のあるミスがあることを知っていますが、私は肯定的な結果を出さずにバージョンをたくさん試しました。 org.springframework.beans.BeanInstantiationException:ここに私のpom.xmlquerydslPredicate with spring-boot-starter-jpa

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-rest</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-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.4.1212.jre7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-dbcp2</artifactId> 
     <version>2.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.projectlombok</groupId> 
     <artifactId>lombok</artifactId> 
     <version>1.16.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-aop</artifactId> 
     <version>1.4.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>21.0</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-beanutils</groupId> 
     <artifactId>commons-beanutils</artifactId> 
     <version>1.9.3</version> 
    </dependency> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger2</artifactId> 
     <version>2.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger-ui</artifactId> 
     <version>2.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.querydsl</groupId> 
     <artifactId>querydsl-jpa</artifactId> 
     <version>4.0.7</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.mysema.maven</groupId> 
      <artifactId>apt-maven-plugin</artifactId> 
      <version>1.1.3</version> 
      <executions> 
       <execution> 
        <id>process-common-model</id> 
        <goals> 
         <goal>process</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/apt</outputDirectory> 
         <processors> 
          <processor>com.query.apt.jpa.JPAAnnotationProcessor</processor> 
         </processors> 
        </configuration> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>com.querydsl</groupId> 
        <artifactId>querydsl-apt</artifactId> 
        <version>4.0.7</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

エラー

によって引き起こされる[org.springframework.data.jpa.repository.support.QueryDslJpaRepository]をインスタンス化に失敗しました:コンストラクターが例外をスローしました。ネストされた例外はjava.lang.IllegalArgumentExceptionです:ドメインクラスcom.coig.prek.webservice.modules.quiz.entiry.Quizのクエリクラスcom.coig.prek.webservice.modules.quiz.entiry.QQuizが見つかりませんでした! (BeanUtils.java:154)〜[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE] at org.springframework.data.repository.core。 .RepositoryFactorySupport.getTargetRepositoryViaReflection(RepositoryFactorySupport.java:365)〜[spring-data-commons-1.13.0.RELEASE.jar:na] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory。 java:101)〜[spring-data-jpa-1.11.0.RELEASE.jar:na] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:81)〜[spring- data-jpa-1.11.0.RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:199)〜[spring-data-commons-1.13.0。 RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:277)〜[spring-data-commons-1.13.0.RELEASE.jar:na] at org.springframework.data。リポジトリ・コレクション・サポート(リポジトリ・ファクトリ・バインディング・サポート(JBoss):263) (AbstractAutowireCapableBeanFactory.java:1687)〜[プロパティ] - [spring-data-jpa-1.11.0.RELEASE.jar:na]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods〜afterPropertiesSet(JpaRepositoryFactoryBean.java:101)〜[ spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.ja va:1624)〜[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE] ... 47個の共通フレームが省略されました 原因:java.lang.IllegalArgumentException:クエリクラスcomが見つかりませんでした。ドメインクラスcom.coig.prek.webservice.modules.quiz.entiry.Quizのためのcoig.prek.webservice.modules.quiz.entiry.QQuiz! (SimpleEntityPathResolver.java:63)〜[spring-data-commons-1.13.0.RELEASE.jar:na] at org.springframework.data.jpa.repository。 (QueryDslJpaRepository.java:84)〜[spring-data-jpa-1.11.0.RELEASE.jar:na] at org.springframework.data.jpa.repository.support.QueryDslJpaRepository(QueryDslJpaRepository.java: 68.)〜[spring-data-jpa-1.11.0.RELEASE.jar:na]at sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド)〜[na:1.8.0_111] at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)〜[na:1.8.0_111]at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)〜[na:1.8.0_111] at j (BeanUtils.java:142)〜[spring-beans-4.3。])を使用しています。 6.RELEASE.jar:4.3.6.RELEASE] ... 56個の共通フレームが省略されました 原因:java.lang.ClassNotFoundException:com.coig.prek.webservice.modules.quiz.entiry.QQuiz at java.net .URLClassLoader。findClass(URLClassLoader.java:381)〜[na:1.8.0_111]at java.lang.ClassLoader.loadClass(ClassLoader.java:424)〜[na:1.8.0_111] at sun.misc.Launcher $ AppClassLoader。 loadClass(Launcher.java:331)〜[na:1.8.0_111] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)〜[na:1.8.0_111] at org.springframework.util.ClassUtils。 (SimpleEntityPathResolver.java:53)〜[春・データ・コモンズ・1.13.0.RELEASE.jar:

01:ナ] ... 63個の共通フレームが

リポジトリを省略

@Repository 
public interface QuizRepository extends PagingAndSortingRepository<Quiz, Long>, QueryDslPredicateExecutor<Quiz> { 
} 

とエンティティ:

@javax.persistence.Entity 
@Table(name = "QUIZ", uniqueConstraints = { 
     @UniqueConstraint(columnNames = "NAME") 
}) 
@ToString 
public class Quiz extends Entity{ 

    @Column(name = "NAME") 
    private @Setter @Getter String name; 
    @Column(name = "TYPE") 
    private @Setter @Getter Integer type; 
    @Column(name = "TIME") 
    private @Setter @Getter Long time; 
    @JsonProperty(value = "branch") 
    @Column(name = "BRANCH") 
    private @Setter @Getter Integer branch; 

    @OneToMany 
    private @Setter @Getter Set<Question> questions; 

    public Quiz() {} 

} 

私は何かが足りない、または私が間違っているの何場合は、教えてもらえますか? ありがとうございました。ここで

+0

は春ブーツのバージョン(1.5.1と1.4.3と?)を混合止める、それがお役に立てば幸いです。フレームワークのバージョンには関係ありません(フレームワークに関係なく)。 –

+0

はい、間違いですが、Googleで見つかった別の解決策を確認した後でコードを修正するのを忘れました。 (それは私の主な問題を解決していなかった) – rdabrowski

答えて

0

QueryDSLを使用する方法についての例です:Qクラスを生成できるようにするには、以下のプラグインが含まれ、また、

<dependency> 
     <groupId>io.springlets</groupId> 
     <artifactId>springlets-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.querydsl</groupId> 
     <artifactId>querydsl-jpa</artifactId> 
    </dependency> 

はあなたのpom.xmlファイルに次の依存関係を含めます

  <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.querydsl.apt.jpa.JPAAnnotationProcessor</processor> 
         </configuration> 
        </execution> 
       </executions> 
       <dependencies> 
        <dependency> 
         <groupId>com.querydsl</groupId> 
         <artifactId>querydsl-apt</artifactId> 
         <version>${querydsl.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>com.querydsl</groupId> 
         <artifactId>querydsl-jpa</artifactId> 
         <version>${querydsl.version}</version> 
        </dependency> 
       </dependencies> 
      </plugin> 

今、QuizRepositoryCustomと呼ばれる新しいリポジトリインターフェイスを作成し、私を定義しますあなたが提供したいと思っています。

public interface QuizRepositoryCustom { 

    // SAMPLE METHOD TO SEARCH QUIZ BY NAME 
    public Page<Quiz> findByNameLike(String name, Pageable pageable); 

} 

QuizRepositoryCustomの実装を作成します。このクラスは、JpaRepository<Quiz, Long>QuizRepositoryCustomインターフェースからQuizRepositoryインタフェースを拡張し、QueryDslRepositorySupport

public class QuizRepositoryImpl extends QueryDslRepositorySupport<Quiz> implements QuizRepositoryCustom { 

    QuizRepositoryImpl() { 
     super(Quiz.class); 
    } 

    public Page<Quiz> findByNameLike(String name, Pageable pageable) { 

     QQuiz quiz = QQuiz.quiz; 

     JPQLQuery<Quiz> query = from(quiz); 

     if (StringUtils.isNotEmpty(name)) { 
      BooleanBuilder searchCondition = new BooleanBuilder();       

      searchCondition.and(quiz.name.eq(name)); 

      if (searchCondition.hasValue()) { 
      query.where(searchCondition); 
      } 
     } 

     long totalFound = query.fetchCount(); 
     List<Quiz> results = query.select(quiz).fetch(); 
     return new PageImpl<M>(results, pageable, totalFound); 
    } 

} 

を拡張しなければなりません。

public interface QuizRepository extends QuizRepositoryCustom, JpaRepository<Quiz, Long> { 

} 

この簡単な手順で、QueryDSLを使用することができます。

また、QueryDSLの使用方法の例を含む次のプロジェクトを確認することもできます。

https://github.com/jcagarcia/proofs/tree/master/spring-security-and-formatters/src/main/java/org/springframework/roo/petclinic/repository

は手始めに