我在一个spring引导应用程序中有一个简单的实体类:
@Entity
public class Plant {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false, updatable = false)
private Long id;
private String code;
private String location;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="companyid", nullable = false)
private Company company;
}
这代表了一种植物。一个公司可以拥有一个或多个工厂,而一个工厂可以仅仅属于一个公司。在postgresql中,使用引用到plant
表的id
字段的companyid
外键字段创建了company
表。很好。
现在,我的问题是:是否必须将companyid
属性添加到plant
类中?如果是,有transient
注释吗?因为由于company
关系,该字段已经在数据库中。
稍后,如果我向这个后端发送一个post请求来创建一个新的工厂,我可以发送一个完整的company
对象,但也只能发送companyid
。
什么是正确的方式来建模呢?标准是什么?我记得,在EF核心中,如果我引用了一个导航属性,那么我也向模型类添加了id
属性(也称为外键)。
发布于 2022-01-12 12:55:15
关联设置看起来是正确的,使用JPA,您不会显式地创建一个外键属性(如果您对默认行为很满意,甚至不一定需要@JoinColumn
注释)。
为了创建REST,一种标准的方法是将实体映射到DTO,以便从API发送数据到API。根据(端点特定的)用例,DTO可能只包含关联实体的id
,而不是整个实体。
像mapstruct
这样的工具可以简单地生成相应的映射代码。
减少一些样板的另一个想法是使用像spring-data-rest
这样的框架,它从定义的实体类https://spring.io/projects/spring-data-rest中自动创建REST-API。
https://stackoverflow.com/questions/70686495
复制相似问题