【问题标题】:Relational database foreign keys in Spring Boot JPA/HibernateSpring Boot JPA/Hibernate 中的关系数据库外键
【发布时间】:2017-03-08 21:57:22
【问题描述】:

我正在使用带有 Gradle 的 Spring Boot JPA。我正在努力寻找一个我可以遵循的指南,该指南专注于使用正确的 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】:

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

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 2020-05-17
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2020-06-25
    • 2017-11-13
    • 2010-12-26
    相关资源
    最近更新 更多