Spring Data Rest Kotlin关联POST请求技术咨询
Spring Data Rest: 通过关联链接直接创建实体关联
在Spring Data Rest中,我们可以直接通过提供关联资源的完整URL来快速建立实体间的关联关系,这种实现方式在Java和Kotlin编写的实体类中都能稳定运行。下面是具体的操作示例和关键配置说明:
1. 先创建父实体资源
首先我们创建一个Library实体实例,使用curl发送POST请求:
curl -i -X POST -H "Content-Type:application/json" -d '{"name":"My Library"}' http://localhost:8080/libraries
请求成功后,服务器会返回新创建的Library资源的URL(示例中为http://localhost:8080/libraries/1),我们后续会用到这个链接来建立关联。
2. 创建子实体并关联到父实体
接下来创建Book实体时,直接在请求体中指定Library的资源URL即可自动建立关联:
curl -i -X POST -d '{"title":"Books", "library":"http://localhost:8080/libraries/1"}' -H "Content-Type:application/json" http://localhost:8080/books
Spring Data Rest会自动解析这个URL,将新创建的Book与对应的Library关联起来,无需手动处理数据库外键逻辑。
实体类的关键配置
不管是Java还是Kotlin版本的实体,都需要正确配置JPA关联注解,这样Spring Data Rest才能识别并处理关联关系:
Java版本实体示例
@Entity public class Library { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "library", cascade = CascadeType.ALL) private List<Book> books = new ArrayList<>(); // 构造函数、getter和setter方法 }
@Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToOne @JoinColumn(name = "library_id") private Library library; // 构造函数、getter和setter方法 }
Kotlin版本实体示例
@Entity class Library( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, val name: String, @OneToMany(mappedBy = "library", cascade = CascadeType.ALL) val books: MutableList<Book> = mutableListOf() ) @Entity class Book( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, val title: String, @ManyToOne @JoinColumn(name = "library_id") val library: Library )
注意@ManyToOne和@OneToMany的映射关系要对应,mappedBy属性要指向子实体中关联父实体的字段名,这样Spring Data Rest才能正确处理关联资源的链接解析。
内容的提问来源于stack exchange,提问作者Vijay Lakshman
相关产品推荐
相关产品推荐

