Spring Data Jpa 使用另一个实体作为字段发布请求-使用id还是传递完整对象?

z9gpfhce  于 2023-04-30  发布在  Spring
关注(0)|答案(1)|浏览(141)

我有以下实体Client,每个客户端只能有一个Trainer

@Entity
@Table(name = "Client")
public class Client {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@ManyToOne
private Trainer trainer;

// getters and setters

}

客户端只能由 * 现有 * 培训师创建,I。我不会通过一个新的教练坚持。
如果我的帖子请求dto创建一个client是e.例如,如下所示,然后通过id获取trainer并将其添加到要持久化的实体中?

{
  "id": 123
  "trainerId": 456
}

我能想到的唯一其他选择是在post请求中传递一个完整的现有训练器对象?

{
  "id": 123
  "trainer": {"id":456} // + other existing trainer fields
}
5uzkadbs

5uzkadbs1#

第一种方法(只传递一个培训师ID)在这里似乎更合适。
由于两种方法都需要检查所提供的Trainer id(或整个Trainer对象)是否实际上引用DB中的现有Trainer- passings id是通用的。当您只需要引用一个Trainer时,Trainer会有多个字段来传递它们,这不是一件好事(这可以通过只使用id来完成)。
此外,您可以使用#getReferenceById方法以更有效的方式简化id到实体的Map(但是在找不到Trainer的情况下仍然需要处理异常)。

相关问题