首页 > 解决方案 > 有没有办法将具有多个外键的列的表映射到 Spring Boot 中的特定实体

问题描述

我正在使用 imdb 数据集,需要一些帮助。

我有这个演员/导演表,其中 nconst 是表的主键,而 knownForTitles 是电影/系列表的外键。

演员/导演表

在此处输入图像描述

电影/系列表

在此处输入图像描述

c1 列是电影/系列表的主键。

这是我的 2 个实体

@Entity
@Table(name="moviesAndSeries")
@Data
public class SeriesAndMovies {

    @Id
    @Column(name="c1")
    private String tconst;

    @Column(name="c2")
    private String titleType;

    @Column(name="c3")
    private String primaryTitle;

    @Column(name="c4")
    private String actualTitle;

    @Column(name="c5")
    private Integer isAdult;

    @Column(name="c6")
    private Integer startYear;

    @Column(name="c7")
    private Integer endYear;

    @Column(name="c8")
    private Integer runTimeMinutes;

    @Column(name="c9")
    private String genres;

    public SeriesAndMovies() {
    }
}

@Entity
@Table(name="data")
@Data
public class ActorsAndDirectors {

    @Id
    @Column(name="nconst")
    private String id;

    @Column(name="primaryName")
    private String name;

    @Column(name="birthYear")
    private Integer birthYear;

    @Column(name="deathYear")
    private Integer deathYear;

    @Column(name="primaryProfession")
    private String profession;

    @Column(name="knownForTitles")
    private ??? popularTitles;

    public ActorsAndDirectors() {
    }

}

有没有办法使用 jpa 注释来映射它?

提前致谢

标签: javaspring-bootjpa

解决方案


数据集和数据库之间存在差异。即使数据集中的数据存储为表示值列表的字符串,您也可以将这些值转换为正确表中的条目。

将列映射为 id 列表在关系数据库中没有意义。正确的方法是在两个实体之间创建关联,使用一对多或(多对多):

@Entity
@Table(name="data")
@Data
public class ActorsAndDirectors {

    ...

    @OneToMany
    private Set<SeriesAndMovies> knownForTitles;


}

当您从数据集中读取数据时,您需要对其进行解析并将正确的值插入到数据库的正确表中。


推荐阅读