我有一个数据库表,需要对其执行排序查询。若要对另一个表进行排序,则需要对另一个表进行联接。问题是数据库中不存在另一个表,因为我们从CSV文件读取服务启动时所需的数据,并将其保存为内存中的列表。
是否有可能以某种方式将这个列表作为一种虚拟数据库注入Spring数据?以便它可以使用这个列表来进行所需的连接和排序。
据我所知,我唯一的其他选择是从这个内存列表中创建一个真正的数据库表,或者加载整个表并在服务本身中进行排序。
发布于 2022-08-15 05:00:34
您可以通过Spring数据规范按表达式添加一个特殊的顺序,但这将是非常糟糕的。在HQL中,如下所示:
case rootAlias.attribute when 'value1' then 1 when 'value2' then 2 ... else null end
它将返回一些整数值,您可以根据所具有的映射对其进行升序或降序排序。
即使您有很多值,我还是建议您不要执行联接,而是尝试使主表的attribute
可排序,这样您就不需要这种映射了。您可以创建一个触发器来维护基于映射的列,该列可以直接用于排序。如果通过JPA/Hibernate执行所有更改,还可以使用@PreUpdate
/@PrePersist
侦听器来处理本列的维护。
https://stackoverflow.com/questions/73332130
复制