Как использовать массивы с 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
Массивы и коллекции упомянутых выше типов могут быть сопоставлены со столбцами типа массива, если ваша база данных поддерживает это.
...