我正在尝试使用Spring Boot + Data Rest + JPA构建简单的应用程序 A具有一对多关系的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);
}
}
应用程序启动成功,我可以创建书籍和类别。
问:如何创建和删除它们之间的引用?
我尝试了这里描述的解决方案:POSTing a @OneToMany sub-resource association in Spring Data REST - 对我不起作用:在“ContentType:text / uri-list”标题的PUT请求中,我有响应代码204,数据库中没有变化。看得更深,我在日志中找到了以下调试消息:
s.w.s.m.m.a.RequestMappingHandlerMapping :
Did not find handler method for [/categories/1/books]
此网址仅适用于GET请求。
问:我的配置有什么问题?
感谢。
答案 0 :(得分:2)
创建 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
并回答你的第二个问题:你的配置看起来不错,我已经在你的代码上测试了这个例子。