如何在 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) 之间的关系:
- 提交请求,
- 媒体类型:text/uri-list、
- 数据:http://localhost:8080/categories/1
- 请求http://localhost:8080/books/1/category
卷曲示例:
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
同时回答你的第二个问题:你的配置看起来不错,我已经在你的代码上测试了这个例子。
我正在尝试使用 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) 之间的关系:
- 提交请求,
- 媒体类型:text/uri-list、
- 数据:http://localhost:8080/categories/1
- 请求http://localhost:8080/books/1/category
卷曲示例:
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
同时回答你的第二个问题:你的配置看起来不错,我已经在你的代码上测试了这个例子。