【发布时间】:2022-08-10 14:28:27
【问题描述】:
我想使用带有 QueryDSL 支持的 Spring Data JDBC。根据 Spring 文档 (https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#core.extensions.querydsl),它受支持,但我无法使其工作。
我使用 MariaDB 作为数据库,我的 SpringBoot 版本是 2.6.0。
我在 pom.xml 中的依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql-spring</artifactId>
</dependency>
配置:
@Configuration
@EnableJdbcRepositories
@EnableTransactionManagement
public class DBConfig {
}
我的实体类:
package com.test.model.metadata;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
@Table
public class Action {
@Id
private long id;
private String name;
...
}
我的存储库类:
package com.test.repository;
import java.util.List;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import com.test.model.Action;
import com.querydsl.core.types.Predicate;
@Repository
public interface ActionRepository extends PagingAndSortingRepository<Action, Long>, QuerydslPredicateExecutor<Action> {
@Override
List<Action> findAll(Predicate predicate);
}
QueryDSL谓词用法:
QAction action = QAction.action;
Predicate predicate = action.name.like(\"%Accept%\");
List<Action> actions = actionRepository.findAll(predicate);
Q 类由预处理器正确生成,编译成功,但在应用程序启动期间出现错误:org.springframework.data.repository.core.support.UnsupportedFragmentException: Repository com.atende.db.metadata.jdbcrepository.ActionRepository 实现了 org.springframework.data.querydsl.QuerydslPredicateExecutor 但 JdbcRepositoryFactory 不支持 Querydsl!
我的解决方案中还缺少什么?
当我直接将 QueryDSL 与 JdbcTemplate 一起使用时,它可以工作:
QAction action = QAction.action;
SQLTemplates dialect = new MySQLTemplates();
Connection connection = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
SQLQuery<String> query = new SQLQuery<>(connection, dialect);
List<Tuple> actions = query.select(action.id, action.name)
.from(action)
.where(action.name.like(\"%Action%\"))
.fetch();
我也尝试使用 infobip querydsl 库 (https://github.com/infobip/infobip-spring-data-querydsl) 但得到了同样的错误。
标签: spring-boot jdbc spring-data querydsl spring-data-jdbc