一尘不染

如何在Spring Data Rest Application中的实体之间创建引用

spring-boot

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

<!-- 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);
    }
}

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

我尝试了这里描述的解决方案:在Spring Data
REST中发布@OneToMany子资源关联
-不适用于我:在带有
ContentType:text / uri-list”
标头的PUT请求上,我的响应代码为204,并且在数据库。更深入地看,我在日志中发现以下调试消息:

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

该网址仅适用于GET请求。

问:有 什么想法我的配置有问题吗?

谢谢。


阅读 215

收藏
2020-05-30

共1个答案

一尘不染

创建 书(编号:1)之间的关系和类别(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

还要回答您的第二个问题:您的配置看起来不错,并且我已经在您的代码上测试了此示例。

2020-05-30