非常简单的一对多关系 - 一个人与多个宠物。
@Entity
class Human{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy="human", cascade={CascadeType.ALL})
private List<Pet> pets;
// other fields
}
@Entity
class Pet{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="human_id")
private Human human;
// others fields
}
这会导致创建两个表 HUMAN(id)和 PET(id,human_id)。
EDIT-1 :我正在使用Spring Data Rest
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
EDIT-2 :以下是我发布数据的最新信息。 我发布给人类:
{
// human data
"pets": [
"http://localhost/pets/1",
"http://localhost/pets/2"
]
}
问题:PET表中的 human_id 列为空。找到所有其他字段但未建立关系。
我错过了什么?
答案 0 :(得分:1)
我能够通过删除mappedBy并将@JoinColumn放在@OneToMany旁边来保持关系。
这有什么问题吗?性能问题?
@Entity
class Human{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JoinColumn(name="human_id")
@OneToMany(cascade={CascadeType.ALL})
private List<Pet> pets;
// other fields
}
@Entity
class Pet{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade=CascadeType.ALL)
private Human human;
// others fields
}
答案 1 :(得分:0)
首先,在@ManyToOne列中使用CascadeType.ALL是危险的。 删除宠物时可以删除人。
和
关联每个对象后保存haman
Human human = new Human();
Pet pet1 = new Pet();
pet1.setHuman(human);
Pet pet2 = new Pet();
pet2.setHuman(human);
List<Pet> pets = new ArrayList<Pet>();
pets.add(pet1);
pets.add(pet2);
human.setPets(pets);
然后保存human