如何使用 Spring Data JDBC 将一对多实体保存到 PostgreSQL?

问题描述 投票:0回答:1

我正在尝试使用 Spring Boot 和 Spring Data JDBC 将一对多实体保存到 PostgreSQL 数据库。

主要应用代码:

@SpringBootApplication
public class TvApplication
{
    @Autowired
    private SeasonRepository seasonRepository;
    @EventListener(ApplicationReadyEvent.class)
    public void saveToDatabase()
    {
        Episode episode1 = new Episode("firstEpisode");
        Episode episode2 = new Episode("secondEpisode");
        Season season = new Season("firstSeason");
        season.addEpisode(episode1);
        season.addEpisode(episode2);
        seasonRepository.save(season);
    }
}

季节班:

@Table("season")
public class Season
{
    @Id
    @Column("id")
    private long id;
    @Column("name")
    private String name;
    @MappedCollection(idColumn = "id", keyColumn = "seasonid")
    private List<Episode> episodes;
    public Season(long id, String name, List<Episode> episodes)
    {
        this.id = id;
        this.name = name;
        this.episodes = episodes;
    }
    public Season(String name)
    {
        this(0, name, new ArrayList<>());
    }
    public void addEpisode(Episode episode)
    {
        episodes.add(episode);
    }

剧集类别:

@Table("episode")
public class Episode
{
    @Id()
    @Column("id")
    private long id;
    @Column("name")
    private String name;
    public Episode(long id, String name)
    {
        this.id = id;
        this.name = name;
    }
    public Episode(String name)
    {
        this(0, name);
    }

我得到的是这个异常:

org.postgresql.util.PSQLException: ERROR: insert or update on table "episode" violates foreign key constraint "episode_seasonid_fkey"
Detail: Key (seasonid)=(0) is not present in table "season"

我认为 Spring 无法从表“season”中读取自动生成的键。

java postgresql spring-boot spring-data spring-data-jdbc
1个回答
0
投票

new
实体的id
-1
而不是零,或者您可以将其保留为
null

将代码更新为以下内容:

public Season(String name)
{
    this(-1L, name, new ArrayList<>());
}

public Episode(String name)
{
    this(-1L, name);
}
© www.soinside.com 2019 - 2024. All rights reserved.