如何在 Spring 数据 Rest 应用程序中创建实体之间的引用

How to create a reference between entities in Spring Data Rest Application

我正在尝试使用 Spring Boot + Data Rest + JPA 构建简单的应用程序。
A 具有具有一对多关系的类别和图书实体:

<!-- language-all: java -->    
@Entity
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "category")
    private Set<Book> books;

    ...getters & setters next...
}

@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;
    @ManyToOne
    private Category category;

    ...getters & setters next...
}

每个实体的简单存储库

@RepositoryRestResource
public interface BookRepository extends JpaRepository<Book, Long> {}

@RepositoryRestResource
public interface CategoryRepository extends JpaRepository<Category, Long> {}

和申请:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

应用程序启动成功,我可以创建书籍和类别。
问:如何在它们之间创建和删除引用?

我尝试了此处描述的解决方案:POSTing a @OneToMany sub-resource association in Spring Data REST - 对我不起作用:在 "ContentType: text/uri-list" header 的 PUT 请求中,我的响应代码为 204,并且数据库中没有任何变化。深入观察,我在日志中发现了以下调试消息:

s.w.s.m.m.a.RequestMappingHandlerMapping : 
Did not find handler method for [/categories/1/books]

此 url 仅适用于 GET 请求。

问: 知道我的配置有什么问题吗?

谢谢。

创建 book(id:1) 和category(id:1) 之间的关系:

卷曲示例:

curl -X PUT -H "Content-Type: text/uri-list" -d "http://localhost:8080/categories/1" http://localhost:8080/books/1/category

删除这个关系只需要对同一个地址做一个删除请求

卷曲示例:

curl -X DELETE http://localhost:8080/books/1/category

同时回答你的第二个问题:你的配置看起来不错,我已经在你的代码上测试了这个例子。