Spring boot 如何在SpringBoot中的@OnetoOne映射中插入数据

Spring boot 如何在SpringBoot中的@OnetoOne映射中插入数据,spring-boot,hibernate,jpa,h2,Spring Boot,Hibernate,Jpa,H2,我正在尝试学习SpringBoot并尝试制作一个API 我有多个实体,如下所示: @Entity public class Superhero { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; } 然后另一个实体是Superhero_stats,我想添加额外的字段,并将其映射到Superhero实体中的英雄 @Entity

我正在尝试学习SpringBoot并尝试制作一个API

我有多个实体,如下所示:

@Entity
public class Superhero {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  private String name;
}
然后另一个实体是Superhero_stats,我想添加额外的字段,并将其映射到Superhero实体中的英雄

    @Entity
    @Table(name = "superhero_stats")
    public class SuperheroStats {
    
      @Id
      @GeneratedValue
      private int stats_id;
    
      @OneToOne(mappedBy = "superhero", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
      Superhero superhero;
    
      private int intelligence;
}
我的问题是如何在参考资料中的data.sql脚本中编写sql查询。我在主应用程序类中发现了许多尝试执行相同操作的示例,但我还想知道是否可以通过data.sql文件实现这一点

下面是我正在尝试的示例data.sql

insert into superhero(name) values ('Spiderman')
insert into superhero(name) values ('Superman')
insert into superhero(name) values ('Batman')


insert into superhero_stats(stats_id, superhero, intelligence) values (1,1,100)
insert into superhero_stats(stats_id, superhero, intelligence) values (2,2,200)
insert into superhero_stats(stats_id, superhero, intelligence) values (3,3,300)

编辑:我在应用程序开始时尝试此操作。不用于测试。

要连接到数据库并使用shell运行命令,请执行以下操作:

java-cp h2*.jar org.h2.tools.Shell

并将sql语句复制到
sql>
提示符中

要按原样运行脚本

java-cp h2*.jar org.h2.tools.RunScript-url jdbc:h2:~/test-script data.sql


请参阅此处的教程:答案是:。

我必须更改定义实体的方式。我改变如下

在我的
Superhero
实体中添加了此实例,而不是在
SuperheroStats
实体中添加了此实例

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  @JoinColumn(name = "superhero_id")
  private List<SuperheroStats> superheroStats = new ArrayList<>();
现在我的data.sql如下所示:

insert into superhero(name) values ('Spiderman')
insert into superhero(name) values ('Superman')
insert into superhero(name) values ('Batman')


insert into superhero_stats(stats_id, superhero_id, intelligence) values (1,1,100)
insert into superhero_stats(stats_id, superhero_id, intelligence) values (2,2,200)
insert into superhero_stats(stats_id, superhero_id, intelligence) values (3,3,300)

从您的问题中看不明显,但我假设您正在使用h2内存数据库和/或单元测试来测试这一点?请参阅此答案,如果是:。否则,只需安装并使用本地数据库mysql或mariadb,例如.@samoussa.usa是的,我正在使用h2。这不是单元测试。这是我在应用程序初始启动时所需要的。我的问题更多的是:我的“data.sql”脚本是什么。当超级英雄id自动生成时,我如何插入超级英雄id超级英雄统计实体,我在超级英雄统计中引用的第二点
超级英雄对象
,我如何插入它?
insert into superhero(name) values ('Spiderman')
insert into superhero(name) values ('Superman')
insert into superhero(name) values ('Batman')


insert into superhero_stats(stats_id, superhero_id, intelligence) values (1,1,100)
insert into superhero_stats(stats_id, superhero_id, intelligence) values (2,2,200)
insert into superhero_stats(stats_id, superhero_id, intelligence) values (3,3,300)