Попробуйте следующее:
SELECT
*,
ARRAY(
SELECT
*
FROM
unnest(string_to_array(trim(both ',' from prods), ','))
WHERE
unnest = ANY(string_to_array(',142,87,', ','))
)
FROM
prods_table;
Выход:
1 ,142,10,75, {142}
2 ,142,87,63, {142,87}
3 ,75,73,2,58, {}
4 ,142,2, {142}
Добавьте функцию cardinality(anyarray)
в последний столбец, чтобы получить только количество совпадений.
И подумайте об изменении дизайна базы данных.
Вы правы, что spring-data-r2dbc не является ORM. Он не отображает отношения в вашей базе данных. Что он может сделать, так это сопоставить строки вашей базы данных с объектами. Следующий фрагмент кода сопоставляется со строкой базы данных ниже:
Пример класса в Kotlin:
@Table("song")
class SongRow(
@Id val id: Long,
val name: String,
val artist: Long
)
Строка:
create table song(
id integer identity primary key,
artist integer references artist(id),
name varchar(100) NOT NULL,
);
Для способа автоматического получения столбцов в соответствии с вашей моделью см .: https://docs.spring.io/spring-data/r2dbc/docs/1.0.0.M1/reference/html/#mapping-usage
В ссылке выше также указано, что вы можете использовать @Column.
Что касается одного из ваших вопросов:
Какие варианты существуют или планируются для поддержки ORM в реактивных приложениях? Понятия не имею
blockquote>Что касается:
присоединяется при использовании spring-data-r2dbc
blockquote>Используя аннотацию @Query, вы может выполнять соединения. Если вы хотите отобразить данные, полученные с помощью объединений, вам лучше использовать DatabseClient (см. https://docs.spring.io/spring-data/r2dbc/docs/1.0.0.M1 /reference/html/#r2dbc.datbaseclient)