Hibernate Spring数据Rest JPA OneToMany Null列
非常简单的一对多关系——一个人对多宠物Hibernate Spring数据Rest JPA OneToMany Null列,hibernate,jpa,spring-data,h2,spring-data-rest,Hibernate,Jpa,Spring Data,H2,Spring Data Rest,非常简单的一对多关系——一个人对多宠物 @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
@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
}
问题:宠物表中的人类id列为空。已找到所有其他字段,但未建立关系
我遗漏了什么?首先,在@manytone列中使用CascadeType.all是危险的。 当宠物被删除时,它可以删除一个人 以及 关联每个对象后保存哈曼
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-Human=新人类();
Pet pet1=新Pet();
pet1.setHuman(人);
Pet pet2=新Pet();
pet2.setHuman(人);
List pets=new ArrayList();
pets.add(pet1);
pets.add(pet2);
人类。setPets(宠物);
然后保存
human
通过删除mappedBy并将@join列放在@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
}
@实体
阶级人{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@JoinColumn(name=“human_id”)
@OneToMany(cascade={CascadeType.ALL})
私人宠物名单;
//其他领域
}
@实体
等级宠物{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@多通(级联=级联类型.ALL)
私人的人;
//其他领域
}
Jaehyun,谢谢,但我使用的是Spring Data Rest,我无法控制像这样设置对象。它通过Jackson直接进入Hibernate。@szxnyc你能写下你的帖子正文吗?我添加了我用来发布宠物关系的URL。我想你是想看到我使用的是URL,而不是一个实际的宠物定义
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);
@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
}