Как использовать массивы с Spring Data JDBC

Я пытаюсь использовать Spring Data JDBC для моей базы данных PostgreSQL. Я определил следующие бобы

@Data
class Report {

    @Id
    private Long id;

    private String name;

    private Set<Dimension> dimensions;

}

@Data
class Dimension {

    private String name;

    private Long[] filterIds;

}

и соответствующий DDL

CREATE TABLE report (
    id bigserial PRIMARY KEY,
    name text NOT NULL
);

CREATE TABLE dimension (
    id bigserial PRIMARY KEY ,
    report bigint,
    name text,
    filter_ids bigint[],
    FOREIGN KEY (report) REFERENCES report(id) ON DELETE CASCADE ON UPDATE CASCADE
);

Затем я попытался вставить отчет

final Dimension dimension = new Dimension();

dimension.setName("xyz");
dimension.setFilterIds(new Long[]{ 1L, 2L, 3L });

final Report report = new Report();

report.setName("xyz");
report.setDimensions(Collections.singleton(dimension));

repository.save(report);

где repository это просто CrudRepository<Report, Long>,

Это дало мне следующую ошибку

org.postgresql.util.PSQLException: ERROR: column "filter_ids" is of type bigint[] but expression is of type bigint
  Hinweis: You will need to rewrite or cast the expression.
  Position: 116

Могу ли я как-то рассказать Spring Data JDBC, как сопоставить типы массивов?

1 ответ

Решение

В настоящее время это невозможно. Есть проблемы для этого. Отправной точкой является следующий: https://jira.spring.io/browse/DATAJDBC-259

С выпуском Spring Data JDBC 1.1.0 это стало возможным. Смотрите документацию здесь:

В настоящее время поддерживаются свойства следующих типов:

  • Все примитивные типы и их упакованные типы (int, float, Integer, Float и т. Д.)

  • Перечисления сопоставляются с их именем.

  • Строка

  • java.util.Date, java.time.LocalDate, java.time.LocalDateTime и java.time.LocalTime

  • Массивы и коллекции упомянутых выше типов могут быть сопоставлены со столбцами типа массива, если ваша база данных поддерживает это.

  • ...

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