[英]Posting just the id of unidirectional many to one relationship
我正在提交POST请求(JSON),以创建一个Person的新实例,并且每个Person都必须具有与之关联的Status。 有一个预填充的状态表,其状态数量有限。 这里只是提交状态的实体ID是最好的方法吗?
当前,我仅在请求中提交Status实体的ID,但这意味着使用该ID从数据库加载状态,然后将其添加到临时Person之前要持久保存以满足JPA / DB约束,但这效率低下。
请求正文(为简洁起见已被截短)未编组到PersonDTO:
{
"name" : "Dave",
"statusId" : "1",
::
}
身份实体
@Entity
public class Status {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Column
private String status;
}
人实体
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@ManyToOne(optional = false)
@JoinColumn(name = "status_id")
private Status status;
::
最好的方法实际上是在JSON请求中提交状态对象,这样我就不必对状态ID进行任何形式的查找吗?
{
"name" : "Dave",
"status" : {
"id" : 1
"status" : "AVAILABLE"
},
::
}
我很欣赏我可以将启动时的状态预加载到一个单例中,以便可以访问它们或缓存使用ID返回状态的服务类方法,但是我想知道最好的方法是什么,因为如果使用本地SQL,我可以只需将带有状态ID的Person插入数据库中,而无需事先对状态进行任何查找。
1)一旦开始使用Native SQL,您将在越来越多的地方开始使用它。 最终,您将失去JPA给您的数据库提供程序独立性。 我并不是说这是100%不好,我只是说..
2)您可以为Status
应用二级缓存,因为它似乎是一种字典表:
@Entity
@Cacheable
3)如果您不希望对状态对象本身进行任何更改,则不应该使用findById
来加载状态对象,后者会进入数据库,而应使用getOne
代替,后者只会创建一个引用,在您的情况下就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.