[英]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.