Spring Boot JPA / Hibernate

时间:2016-10-26 13:40:43

标签: spring hibernate jpa spring-boot h2

我正在使用带有Gradle的Spring Boot JPA。我正在努力寻找一个我可以遵循的指南,该指南专注于使用正确的Spring Boot语法创建关系数据库。我有一个去,但我得到了这个错误

No property idTestCase found for type TestRun!

我希望TestRun和TestData实体之间具有OneToOne关系,以及与TestRun具有OneToMany关系的TestCase实体。我估计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=设置为关系另一侧的主键字段的名称,但同样没有构建。

非常感谢

1 个答案:

答案 0 :(得分:0)

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