我已经实现了Spring Data JPA并将Querydsl用于搜索条件。如果在spring docs中给出了很少的更改,那么它可以正常工作。
我的REST控制器方法如下所示
@RequestMapping(value = "/testdsl", method = RequestMethod.GET)
Iterable<User> index(
@QuerydslPredicate(root = User.class) Predicate predicate)
{
return userRepository.findAll(predicate);
}
并且下面给出了存储库,评论方法很好地为我提供了投影对象。
public interface UserRepository extends CrudRepository<User, Integer>,
QueryDslPredicateExecutor<User>, QuerydslBinderCustomizer<QUser>
{
//Collection<OnlyName> findAllProjectedBy();
//OnlyName findProjectedById(Integer id);
@Override
default public void customize(QuerydslBindings bindings, QUser root)
{
bindings.bind(String.class)
.first((StringPath path, String value) -> path.containsIgnoreCase(value));
}
}
然后我实现了这个投影,我得到整个实体类的一个子集,作为响应返回。
public interface IUserProjection {
//...all required getters..
}
现在我希望我的Querydsl返回这些投影对象。 我们有这样的组合样品吗?我正在使用spring boot 1.4.0.RELEASE
答案 0 :(得分:0)
你可以这样做,但你需要一个具体的课程......
class UserProjection {
@QueryProjection
public UserProjection(long id, String name){
...
}
}
然后你的查询看起来像(在QueryDSL 3中):
query.from(QTenant.tenant).list(new QUserProjection(QTenant.tenant.id, QTenant.tenant.name));
编辑:
查询queryDSL 4将如下所示:
List<UserProjection> dtos = query.select(new QUserProjection(QTenant.tenant.id, QTenant.tenant.name))
.from(tenant).fetch();