4

我正在尝试将 Spring Data JDBC 用于我的 PostgreSQL 数据库。我定义了以下bean

@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);

whererepository只是一个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 如何映射数组类型吗?

4

2 回答 2

4

随着 Spring Data JDBC 1.1.0 的发布,这成为可能。请参阅此处的文档:

当前支持以下类型的属性:

  • 所有原始类型及其装箱类型(int、float、Integer、Float 等)

  • 枚举被映射到他们的名字。

  • 细绳

  • java.util.Date、java.time.LocalDate、java.time.LocalDateTime 和 java.time.LocalTime

  • 如果您的数据库支持,上述类型的数组和集合可以映射到数组类型的列。

  • ...

于 2020-02-05T10:08:36.203 回答
2

正如P44T回答的那样,这应该从 Spring Data JDBC 的 1.1 版本开始工作,就像您使用它一样。

原始答案

目前是不可能的。这方面存在问题。一个起点是这个:https ://jira.spring.io/browse/DATAJDBC-259

于 2019-01-23T06:47:28.277 回答