Spring Data Rest JPA OneToMany空JoinColumn

3

非常简单的一对多关系 - 一个人对应多个宠物。

@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),与IT技术有关。 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>

编辑-2: 这里是我发布数据的更新情况。而且我是发布给人类看的。

{
  // human data

  "pets": [
    "http://localhost/pets/1",
    "http://localhost/pets/2"
  ]
}
问题:PET表中的human_id为空。所有其他字段都是正确的,但关系没有建立。

我错过了什么吗?


可能是如何在Spring Data REST和JPA中维护双向关系?的重复问题。 - Alan Hay
2个回答

1

我通过移除mappedBy并将@OneToMany与@JoinColumn放在一起,成功地使关系持久化。

这样做有什么问题吗?性能问题?

@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
}

0
首先,在@ManyToOne列中使用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


Jaehyun,谢谢但是我正在使用Spring Data Rest,我无法控制设置对象。它通过Jackson直接传递到Hibernate中。 - szxnyc
@szxnyc 你能写下你的帖子内容吗? - Jaehyun Shin
我添加了用于发布宠物关系的URL。我认为您想要确认我使用的是URL而不是实际的宠物定义。 - szxnyc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接