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