问题描述
我使用的是 spring-boot-starter-data-jdbc 2.4.2。在我的域聚合中,我需要映射从另一个表中的列填充的字符串列表。这是一个遗留数据库,所以我无法控制表名和列名,需要使用自定义名称。我看到有一个 @MappedCollection 注释,但在这种情况下看不到如何使用它。下面是我的课:
@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 Data 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;
}
请注意,equals
和 hashCode
以及采用其中使用的所有参数的构造函数都很重要,因为实体用于 Set
。