当前位置: 首页 > 知识库问答 >
问题:

@query不能使用QueryDSL谓词

叶元凯
2023-03-14

我需要@query的原因是应用基于身份验证主体的安全性。

@Query("select o from Orders o where ?#{principal.username} = o.username")

存储库的完整代码:

public interface OrderRepository extends JpaRepository<Order, Integer>, QuerydslPredicateExecutor<Order>{

    @Override
    @Query("select o from Orders o where ?#{principal.username} = o.username")
    Page<Order> findAll(Predicate predicate, Pageable pageable);
}

共有1个答案

孙志
2023-03-14

使用QueryDSL谓词,可以使用query builder创建用于创建查询的类

像这样:

    public class OrderPredicates {

    private OrderPredicates() {

    }

     public static Predicate findByCriteria(OrderSearchCriteria orderSearchCriteria) {

            QOrder order = QOrder.order;
            BooleanBuilder builder = new BooleanBuilder();
           if(orderSearchCriteria.getUsername!=null){
            builder.or(order.username
                        .eq(orderSearchCriteria.getUsername));
           }

            //Some other predicates

            return builder;
        }
}

但是,如果您想要按主体添加一个顺序列表,则可以创建一个临时查询

@Query("from Orders o where o.username = :username")
Page<Order> findAllByUser(@Param(value="username") String username, Pageable pageable);
 类似资料:
  • 环境是Java、Spring-boot、Hibernat、QueryDSL、MySQL。 我有表结构 艾碧索 更新 为了澄清起见,支持UI视图的DTO包含“casename”属性。它是在将域对象转换为DTO时在服务层创建的:

  • 我在应用程序中使用Querydsl来大大改进查询数据库的代码。但是,我有一个来自外部服务的JPA谓词(javax.persistence.criteria.Predicate)。我想混合使用Querydsl和外部谓词创建的查询。例如: 另一个解决方案是将Querydsl谓词转换为JPA谓词: 有可能吗?如果是,我如何做到这一点?如果没有,是否有其他混合谓词的解决方案(比如将两者转换为SQL字符串并

  • 我将Spring Boot 1.5.13与QueryDSL一起使用,每当我向控制器发出调用时,我都会得到以下

  • 我使用查询DSL生成实体EntitySerializer,以便使用QueryDSL(与SpringData集成)查询JPA实体。

  • 我创建了一个GraphQL模式,其中有25个最流行的列作为可查询字段。我想添加一个泛型的“field”输入类型,它由一个名称(db列名+“_”+操作(如gte、gt、contains等)和一个值(用户正在搜索的值)组成。 因此,当用户(在GraphiQL中)输入类似(字段:{name:“age_gt”,值:“50”})作为GraphQL查询的搜索输入时,我可以得到:“age>50”。 所有这些都很

  • 我试图利用Querydsl从表中获取一些结果。到目前为止,这是我尝试过的-- 如何在上面的中合并以便只获取第一个结果?