Spring Boot JPA/Hibernate 中的关系型数据库外键

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

我将 Spring Boot JPA 与 Gradle 结合使用。我正在努力寻找一个可以遵循的指南,该指南重点关注使用正确的 Spring Boot 语法创建关系数据库。我尝试了一下,但收到此错误

No property idTestCase found for type TestRun!

我想要 TestRun 和 TestData 实体彼此之间具有 OneToOne 关系,并且 TestCase 实体与 TestRun 具有 OneToMany 关系。我认为 TestRun 应该包含 TestData 和 TestCase 的外键。

很多时候我进行了更改,但它不会构建,当它构建时,表格看起来不正确,这就是我创建的:

@Entity
public class TestRun {
  @Id  @GeneratedValue(strategy = GenerationType.AUTO)
  private long testRunId;           
  private Boolean result;
  @OneToOne @JoinColumn(name="testData_id")
  private TestData testData;
  @ManyToOne @JoinColumn(name="testCase_id")
  private TestCase testCase;
}

@Entity
public class TestCase {
  @Id  @GeneratedValue(strategy = GenerationType.AUTO)
  private long testCaseId;
  private String name;
  private String description;
  @OneToMany(cascade=CascadeType.ALL, mappedBy="testCase",targetEntity=TestRun.class)
  private Collection<TestRun> testRun;
}

@Entity
public class TestData {
  @Id  @GeneratedValue(strategy = GenerationType.AUTO)
  private long testDataId;
  @OneToOne(cascade=CascadeType.ALL, mappedBy="testData",targetEntity=TestRun.class)
  private TestRun testRun;
}

从指南中我不清楚里面的内容

@JoinColumn(name=
有些人说它需要链接到 POJO 上的字段,有些人说不需要。如果我在 POJO 中创建外键字段,那么我会在数据库表中获得两个外键字段,如果不这样做,则根本不会构建。

例如,从错误中我可以推断它希望我将以下字段添加到 TestRun:

private long idTestCase;           
private long idTestData;

但是我的数据库显示为:

SELECT * FROM TEST_RUN;
TEST_RUN_ID  
ID_TEST_CASE  
ID_TEST_DATA  
RESULT  
TEST_CASE_ID  
TEST_DATA_ID  
(no rows, 3 ms)

我尝试将

@JoinColumn(name=
设置为关系另一端的主键字段的名称,但同样没有构建。

非常感谢

spring hibernate jpa spring-boot h2
1个回答
0
投票

我发现 JBoss 上的指南对于描述不同映射最有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.