Spring 数据 JDBC 具有自定义列名称的一对多

Spring Data JDBC One-To-Many with Custom Column Name

我正在使用 spring-boot-starter-data-jdbc 2.4.2。在我的域聚合中,我需要映射一个从另一个 table 中的列填充的字符串列表。这是一个遗留数据库,所以我无法控制 table 和列名,需要使用自定义名称。我看到有一个 @MappedCollection 注释,但看不到如何在这种情况下使用它。下面是我的 class:

@Data
@Table("NMT_MOVIE_THEATRE")
public class MovieTheatre {

    @Id
    @Column("MOVIE_THEATRE_ID")
    private Long id;

    @Column("ZIP_CODE")
    private String zipCode;

    // this comes from table NMT_CURRENT_MOVIE, column CM_ID, joined by MOVIE_THEATRE_ID
    private List<String> currentMovieIds;
}

使用Spring数据JDBC,如何创建一对多关系?

将您的 String 包裹在一个小实体中。

@Table("NMT_CURRENTMOVIE")
class MovieId {
    @Id
    @Column("CM_ID")
    final String id

    // add constructor, equals and hashCode here or generate using Lombok
}

然后在MovieTheatre中使用它。由于您没有索引列,因此要使用的正确集合是 Set

// ...
class MovieTheatre {
    // ...
    @MappedCollection(idColumn="MOVIE_THEATRE_ID")
    Set<MovieId> currentMovieIds;
}

请注意,equalshashCode 很重要,构造函数采用其中使用的所有参数,因为实体在 Set.

中使用