首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring数据JDBC + Querydsl:错误"JdbcRepositoryFactory不支持Querydsl“

Spring数据JDBC + Querydsl:错误"JdbcRepositoryFactory不支持Querydsl“
EN

Stack Overflow用户
提问于 2022-06-13 08:02:22
回答 2查看 338关注 0票数 0

我想在QueryDSL支持下使用。根据Spring文档(https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#core.extensions.querydsl),它是受支持的,但我无法使它工作。

我使用MariaDB作为数据库,我的SpringBoot版本是2.6.0。

我在pom.xml中的依赖关系:

代码语言:javascript
复制
<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>

配置:

代码语言:javascript
复制
@Configuration
@EnableJdbcRepositories
@EnableTransactionManagement
public class DBConfig {

}

我的实体类:

代码语言:javascript
复制
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;

...

}

我的存储库类:

代码语言:javascript
复制
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谓词用法:

代码语言:javascript
复制
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时,它的工作原理是:

代码语言:javascript
复制
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),但得到了相同的错误。

EN

回答 2

Stack Overflow用户

发布于 2022-06-13 16:55:24

这是对文档的误解(不是您的错,它是以一种不幸的方式构造的)。

您将看到序言,它描述了使用Spring数据模块的一般方法。这并不表示手头的模块(在本例中为JDBC)支持上述所有特性。

票数 0
EN

Stack Overflow用户

发布于 2022-08-10 06:28:27

Spring数据JDBC不提供Querydsl支持。这意味着激活@EnableJdbcRepositories存储库实现的spring-data-jdbc不提供Querydsl支持。

如果您在类路径上有infobip-spring-data-jdbc-querydsl-boot-starter并删除@EnableJdbcRepositories,那么它应该可以工作。QuerydslJdbcPredicateExecutor是片段实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72599490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档