com.querydslでのQクラスの自動生成に問題があります。com.query.dslとspring-boot-jpaの互換性に間違いがある可能性があることは知っていますが、多くのバージョンを試しましたが、肯定的な結果は得られませんでした。これが私のpom.xmlです
<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.beans.BeanInstantiationException:インスタンス化に失敗しました[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が見つかりませんでした!org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)〜[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]でorg.springframework.data.repository.core.supportで。 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。101)〜[spring-data-jpa-1.11.0.RELEASE.jar:na] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)〜[spring-beans-4.3.6 .RELEASE.jar:4.3.6.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)〜[spring-beans-4.3.6.RELEASE.jar:4.3.6。 RELEASE] ... 47個の共通フレームが省略されました原因:java.lang.IllegalArgumentException:ドメインクラスcom.coig.prek.webserviceのクエリクラスcom.coig.prek.webservice.modules.quiz.entiry.QQuizが見つかりませんでした。 modules.quiz.entiry.Quiz!org.springframework.data.querydsl.SimpleEntityPathResolver.createPath(SimpleEntityPathResolver.java:63)〜[spring-data-commons-1.13.0.RELEASE.jar:na] atorg.springframework.data.jpa.repository.support。
リポジトリ:
@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() {}
}
私が何かを逃しているかどうか、または私が間違っていることを教えてもらえますか?助けてくれてありがとう。
QueryDSLの使用方法の例を次に示します。
次の依存関係をpom.xml
ファイルに含めます。
<dependency>
<groupId>io.springlets</groupId>
<artifactId>springlets-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
また、Q
クラスを生成できるようにするには、次のプラグインを含めます。
<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
。このクラスは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);
}
}
ここで、QuizRepository
インターフェイスJpaRepository<Quiz, Long>
とQuizRepositoryCustom
インターフェイスを拡張します。
public interface QuizRepository extends QuizRepositoryCustom, JpaRepository<Quiz, Long> {
}
その簡単な手順で、QueryDSLを使用できるようになります。
また、QueryDSLの使用方法に関するその他の例を含む次のプロジェクトを確認することもできます。
それが役に立てば幸い、
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加