Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Spring数据Rest JPA OneToMany Null列_Hibernate_Jpa_Spring Data_H2_Spring Data Rest - Fatal编程技术网

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
}