2

我有一个带有 JPA 和 H2 的 Spring Boot 应用程序,其中包含两个实体:

@Entity
@Table(name = "people")
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "person_id")
    private long id;

    private String name;

    @OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
    private Set<Skill> skills = new HashSet<Skill>();
}

@Entity
@Table(name = "skills")
public class Skill {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")
    private long id;

    private String name;

    @ManyToOne
    @JoinColumn (name="person_id")
    @JsonBackReference
    private Person person;
}

我有个人实体的 JPA 存储库:

@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {
}

当我尝试保存以下对象时,它会立即返回包含技能的正确实体,但是当我调用 时repository.find(<id-of-saved-entity>),技能是空的(因此它们没有被持久化):

{ "name": "Test", "skills": [ { "name": "Skill1" }, { "name": "Skill2"} ] }

有人可以帮助我并告诉我我的映射和配置有什么问题吗?

4

1 回答 1

0

这是 spring data REST (HATEOAS) 存储库的答案。他们说,您必须向包含 [父] 资源 URI 的关联资源发送 PUT 请求

curl -i -X PUT -H "Content-Type:text/uri-list" -d "http://localhost:8080/libraries/1" http://localhost:8080/books/1/library

http://www.baeldung.com/spring-data-rest-relationships

我希望链接有所帮助。

于 2017-11-15T14:16:21.570 回答