我需要@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);
}
使用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从表中获取一些结果。到目前为止,这是我尝试过的-- 如何在上面的中合并以便只获取第一个结果?