我想在QueryDSL支持下使用。根据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库(https://github.com/infobip/infobip-spring-data-querydsl),但得到了相同的错误。
发布于 2022-06-13 16:55:24
这是对文档的误解(不是您的错,它是以一种不幸的方式构造的)。
您将看到序言,它描述了使用Spring数据模块的一般方法。这并不表示手头的模块(在本例中为JDBC)支持上述所有特性。
发布于 2022-08-10 06:28:27
Spring数据JDBC不提供Querydsl支持。这意味着激活@EnableJdbcRepositories存储库实现的spring-data-jdbc不提供Querydsl支持。
如果您在类路径上有infobip-spring-data-jdbc-querydsl-boot-starter并删除@EnableJdbcRepositories,那么它应该可以工作。QuerydslJdbcPredicateExecutor是片段实现。
https://stackoverflow.com/questions/72599490
复制相似问题