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;
}
请注意,equals
和 hashCode
很重要,构造函数采用其中使用的所有参数,因为实体在 Set
.
中使用
我正在使用 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;
}
请注意,equals
和 hashCode
很重要,构造函数采用其中使用的所有参数,因为实体在 Set
.