spring-data-jpa 将一个列表注入SpringData中,用作一种虚拟数据库表

vbkedwbf  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(126)

我有一个数据库表,需要对它进行排序查询。要进行排序,需要对另一个表进行联接。问题是,另一个表在数据库中不存在,因为我们在服务启动时从CSV文件中读取所需的数据,并将其作为内存中的列表保存。
有没有可能以某种方式将这个列表作为一种虚拟数据库注入到SpringData中?这样它就可以使用这个列表来进行所需的连接和排序。
据我所知,我唯一的其他选择是从这个内存中的列表创建一个真实的的数据库表,或者加载整个表并在服务本身中进行排序。

ux6nzvsh

ux6nzvsh1#

你可以通过Spring Data Specification来添加一个特殊的order by表达式,但是这样做会很难看。在HQL中,它看起来像这样:

case rootAlias.attribute when 'value1' then 1 when 'value2' then 2 ... else null end

该函数将返回某个整数值,您可以根据所拥有的Map按该值进行升序或降序排序。
即使您有很多值,我也建议您根本不进行连接,而是尝试使主表的attribute可排序,这样您就不需要这种Map。您可以创建一个触发器来维护一个基于Map的列,它可以直接用于排序。如果您通过JPA/Hibernate进行所有更改,您还可以使用@PreUpdate/@PrePersist侦听器来处理此列的维护。

相关问题