![](/img/trans.png)
[英]H2 Database created with spring-boot-starter-data-jpa but not with spring-boot-starter-data-jdbc
[英]QuerydslPredicate with spring-boot-starter-jpa
我在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]在org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:101) )〜[spring-data-jpa-1.11.0.RELEASE.jar:na]在org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:81)〜[spring-data-jpa- 1.11.0.RELEASE.jar:na]在org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:199)〜[spring-data-commons-1.13.0.RELEASE.jar:na ] org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:277)〜[spring-data-commons-1.13.0.RELEASE.jar:na] at org.sp 在org.springframework.data.jpa.repository.support的ringframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:263)〜[spring-data-commons-1.13.0.RELEASE.jar:na] .JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java: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]在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.modules.quiz.entiry.QQuiz com.coig.prek.webservice.modules.quiz.entiry.Quiz類! 在org.springframework.data.querydsl.SimpleEntityPathResolver.createPath(SimpleEntityPathResolver.java:63)〜[spring-data-commons-1.13.0.RELEASE.jar:na]在org.springframework.data.jpa.repository.support。 QueryDslJpaRepository。(QueryDslJpaRepository.java:84)〜[spring-data-jpa-1.11.0.RELEASE.jar:na]在org.springframework.data.jpa.repository.support.QueryDslJpaRepository。(QueryDslJpaRepository.java:68)〜 [sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法)處的[spring-data-jpa-1.11.0.RELEASE.jar:na](本機方法)〜sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java處的[na:1.8.0_111]: 62)在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)〜[na:1.8.0_111]在java.lang.reflect.Constructor.newInstance(Constructor.java:423)處[na:1.8.0_111] 〜[na:1.8.0_111]在org.springframework.beans.BeanUtils.instantiateClass(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在java.net.URLClassLoader.findClass(URLClassLoader.java:381)〜[na:1.8.0_111]在Java。 lang.ClassLoader.loadClass(ClassLoader.java:424)〜[na:1.8.0_111]在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)〜[na:1.8.0_111]在java.lang。 ClassLoader.loadClass(ClassLoader.java:357)〜[na:1.8.0_111]在org.springframework.util.ClassUtils.forName(ClassUtils.java:250)〜[spring-core-4.3.6.RELEASE.jar:4.3 .6.RELEASE]在org.springframework.data.querydsl.SimpleEntityPathResolver.createPath(SimpleEntityPathResolver.java:53)〜[spring-data-commons-1.13.0.RELEASE.jar:na] ... ...省略了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() {}
}
你能告訴我我是否錯過了什么,或者我做錯了什么? 謝謝你的幫助。
這是有關如何使用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的更多示例。
希望能幫助到你,
前幾天,我也遇到了這個問題! 但這與您的問題有點不同,類似於:
Failed to introspect Class org.springframework.data.jpa.repository.support.QuerydslJpaRepository] from ClassLoader [sun.misc.Launcher$AppClassLoader@764c12b6]; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.jpa.repository.support.QuerydslJpaRepository] from ClassLoader [sun.misc.Launcher$AppClassLoader@764c12b6]
但是我相信這值得嘗試:
這是這種情況:我克隆了一個具有querydsl實現並正在使用STS IDE的項目。
下載所有依賴項后,我運行了該項目,並成功了,但是在訪問任何端點時,上述錯誤開始提示!
為此,我這樣做了:
我進入.m2
文件夾,刪除了com/querydsl directory
存在的querydsl-jpa
文件夾,然后手動運行mvn clean [ install for war | package for jar ]
mvn clean [ install for war | package for jar ]
下載了所有依賴項並正確鏈接了它們!
重新運行spring項目后,一切正常。
造成此問題的原因:有時從maven或任何其他存儲庫下載依賴項時,jar文件可能會損壞,這在執行之前是無法檢測到的,因此刪除.m2文件夾中的jar並手動運行是有益的,因為有時IDE也可能損壞下載的罐子。
希望這能解決您的問題!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.