У меня есть две таблицы/объекта:
@Entity
@Table(name = "REFERRAL")
public class Referral implements Constants{
....
@Column(name = "REFSRC_ZIP")
private String REFSRC_ZIP;
....
}
@Table(name = "TerritoryZip")
public class Territory {
@Id
@Column(name = "zipCode")
private String zipCode;
@Column(name = "Territory")
private String territory;
}
На самом деле они не связаны между собой, TerritoryZip используется как словарь для поиска списка почтовых индексов по территории. Referral.REFSRC_ZIP содержит список почтовых индексов, разделенных запятыми. Поэтому, когда указана территория, мне нужно использовать список почтовых индексов для этой территории (может быть> 2000) и найти все рефералы, где REFSRC_ZIP содержит любой из почтовых индексов из этого списка.
В SQL я мог бы сделать это так:
SELECT * FROM REFERRAL JOIN TerritoryZip t ON b.REFSRC_ZIP like '%'+t.zipCode+'%'
Но с спящим режимом я пробовал много вещей - у меня ничего не получалось. JoinFormula почти работала (с полем Territory в Referral), но постоянно создает поле с выражением-формулой, даже когда таблица Territory не объединена (когда территория не указана)
P.S. Пример выше упрощен, проект использует PaginatedRepository со многими другими динамически созданными предикатами с QueryDSL, но сейчас я ищу любую идею.
@AndrewLazarus Конечно, это было бы проще, но база данных и приложение такие, какие они есть сейчас, и этой части недостаточно, чтобы переписать довольно много кода и выполнить повторное заполнение данных PROD.




Я предлагаю вам повысить производительность, создав таблицу поиска с одной строкой для каждой записи территориального почтового индекса (каждый столбец проиндексирован) вместо строкового индексирования почтовых индексов. Если вам нужна версия с разделителями-запятыми по какой-либо другой причине, вы можете получить ее с помощью конкатенации строк.