Как использовать массив Postgres "содержит" условие с Hibernate?

Я написал запрос Postgres, как показано ниже, и он не работает при сборке. Как это реализовать в Spring-boot Hibernate?

 @Query(value = "SELECT t from CatalogView t WHERE t.locations=:locations AND STRING_TO_ARRAY(t.myColumn, ',') @> STRING_TO_ARRAY(:myColumn, ',')")
 public Set<TrainerGuides> getData(@Param("locations") String locations,@Param("myColumn") String myColumn);

Зачем я это написал? для сравнения набора строк, разделенных запятой, с вводом строки unorder в Postgres.

    catalog
    ----------------------------------
    id   title     keywords
    ----------------------------------
    1    Title-1   k2,k1,k3,k4,k5
    2    Title-2   k1,k3,k5,k6

Чтобы выбрать строки, сравнивая ключевые слова с моими входными k1, k2, k5

В этом примере должна появиться строка с id: 1.

SELECT *
FROM   catalog
WHERE  STRING_TO_ARRAY(keywords, ',') @> STRING_TO_ARRAY('k1,k2,k5', ',')

Имена идентификаторов, такие как таблицы, столбцы, функции, не могут быть вставлены с использованием параметров. Это мера безопасности.

coladict 06.12.2018 12:11

Указывает ли @Query на собственный запрос? Вы не сможете использовать специальные функции и операторы СУБД в HQL или JPQL.

a_horse_with_no_name 19.12.2018 09:29

вы должны установить nativeQuery = true внутри @Query ()

DHARMENDRA SINGH 26.12.2018 05:41

@DHARMENDRASINGH Я могу это построить. Надеюсь, ожидаемые результаты появятся сейчас. Спасибо

Hearaman 26.12.2018 06:04
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
4
918
1

Ответы 1

вы можете расширить Hibernate Postgresql Dialect и добавить собственные функции базы данных в свой HQL, вот пример:

Я никогда не использовал STRING_TO_ARRAY, но остальное работает нормально.

public class PostgreSQLDialect extends org.hibernate.dialect.PostgreSQLDialect
{

public PostgreSQLDialect()
{
    super();
    registerFunction("replace", new StandardSQLFunction("replace", Hibernate.STRING));
    registerHibernateType(Types.ARRAY, "array"); 
    registerFunction( "string_agg", new StandardSQLFunction("string_agg", Hibernate.STRING) );
    registerFunction( "generate_series", new StandardSQLFunction("generate_series") );
    registerFunction( "STRING_TO_ARRAY", new StandardSQLFunction("STRING_TO_ARRAY", Hibernate.STRING) );
}

@Override
public boolean supportsTupleDistinctCounts()
{
    return true;
}

}

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