Hibernate присоединяйтесь/ищите по лайкам

У меня есть две таблицы/объекта:

@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, но сейчас я ищу любую идею.

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

Andrew Lazarus 06.03.2019 00:00

@AndrewLazarus Конечно, это было бы проще, но база данных и приложение такие, какие они есть сейчас, и этой части недостаточно, чтобы переписать довольно много кода и выполнить повторное заполнение данных PROD.

kburtsev 06.03.2019 18:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
34
0

Другие вопросы по теме