我正在尝试使用 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”中读取自动生成的键。
new实体的
id
是-1
而不是零,或者您可以将其保留为null
。
将代码更新为以下内容:
public Season(String name)
{
this(-1L, name, new ArrayList<>());
}
public Episode(String name)
{
this(-1L, name);
}