Как использовать массив Postgres «содержит» условие с Hibernate? - PullRequest
0 голосов
/ 06 декабря 2018

Я написал запрос 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);

Почему я написал это? для сравнения набора строк, разделенных запятой, с неупорядоченным вводом строк в 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', ',')

1 Ответ

0 голосов
/ 19 декабря 2018

вы можете расширить 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;
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...