通用querydsl顺序通过带有左联接的动态路径生成

 洋索菲命_563 发布于 2023-02-13 19:17

在将JPA与Querydsl和Hibernate一起用于数据存储管理时遇到了问题。示例模型如下:

@Entity
public class User {
    ....

    @ManyToOne
    @JoinColumn(name = "CATEGORY_ID")
    private Category category;
}

@Entity
public class Category {
    ..
    private String acronym;

    @OneToMany(mappedBy = "category")    
    List userList;    
}

在我的Spring MVC webapp中,我有一个带有用户参数和orderBy选择的搜索表单。selectBy选择可以是用户属性或类别属性。orderBy参数存储为Map(fe {“ login”:“ adm”,{“ firstName”:“ John”}。搜索功能接收搜索参数(作为字符串)和上面的带有订单说明的地图。简化代码订购如下:

Map orderByMap = new HashMap();
orderByMap.put("firstName", "asc");
orderByMap.put("unit.acronym", "desc");

PathBuilder pbu = new PathBuilder(User.class, "user");

....

for (Map.Entry order : orderByMap.entrySet())
{
    // for simplicity I've omitted asc/desc chooser
    query.orderBy(pbu.getString(order.getKey()).asc());
}

当我要引入按类别的参数(例如{“ category.acronym”,“ desc”})排序时,问题就开始了。正如解释在这里,上面的代码将querydsl使用的跨类别为表和omitt的用户,无需分类,这不是预期的行为加入。

我知道,我必须在“类别”中引入左联接,并使用别名进行排序以使其正常工作,但是我正在寻找一种有效的动态方式。剥离每个String以查找类别或任何其他实体(例如“ user.category.subcategory.propetry”)将引入很多难看的代码,我宁愿不这样做。

我希望通过一些更优雅的解决方案获得帮助。

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有