我是java和spring的新手。我有兩節課
1級
class A {
Long id;
String attr1;
String attr2;
//getters & setters
}
2 級
class B {
Long id;
String attr1;
String attr2;
String attr3;
String attr4;
@ManyToOne
A a;
//getters & setters
}
我希望當我通過提供 A 類現有物件的 id 來呼叫我的 api 時,我將能夠將公共屬性插入到 B 類的新物件中。
請問什么是最好的方法來做到這一點
你覺得那樣做怎么樣?
@PostMapping("/test/{idObjectA}")
public B createNewB(@PathVariable Long idObjectA, @RequestBody B objectB){
//verify if ids are null..
A objectA = aRepository.getAbyId(idObjectA)
objectB.setAttr1(objectA.getAttr1);
objectB.setAttr2(objectA.getAttr2);
objectB.setA(objectA);
B result = bRepository.save(objectB);
return result;
}
uj5u.com熱心網友回復:
您說的是 REST,然后按照REST。
根據您的描述,看起來物件 A 是一種容器型別,并且可能有多個 A 實體(基于 id),例如jobs物件將有job-id
考慮到這一點 /test/A [HTTP POST] // 容器物件級別的 POST、GET、PUT
對A的專案
/test/A/{id} // POST, GET, PUT at container's item level
創建 A 的子資源 B
/test/A/{id}/B // POST, GET, PUT at B level (which is a child of A)
由于您對 B 使用了 @ManyToOne,因此 A 的實體似乎可以有多個子項 B
訪問 B
/test/A/{id}/B
訪問 B 的專案
/test/A/{id}/B/{id}
一個現實生活中的例子是:
mycompany/jobs/123/positions/1
最后要注意一點:在大多數情況下,您可以對物體 A 使用 @OneToMany(而不是在物體 B 上使用 @ManyToOne),因為通常您需要從父級訪問子級。但是如果你也需要從孩子訪問父母,你可以做雙向。即@OneToMany在物體 A 和@ManyToOne物體 B 中使用。
關于在物件 A 和 B 之間使用公共屬性的問題
首先是一些背景關系:
您可以從基本物體繼承屬性(按相同名稱)。例如,如果您有一個“人”作為基本物體 - 它可能有姓名、姓氏、年齡等。現在“員工”、“經理”等可以從“人”繼承。但是在這個例子中,person 可以是一個抽象類,因為你將自己創建一個 person 物體。請參閱此內容以了解更多資訊。
在另一個示例中,如果您有一個從“父”繼承的“子”物體——這兩個物體可以獨立存在并且它們可以具有相同的屬性名稱(名稱、姓氏、年齡等)——但它們將具有不同的資料。
在您的情況下,您似乎不僅希望物體 A 和 B 具有相同的屬性,而且您實際上希望共享相同的資料。那是錯誤的設計。它不是標準化的資料庫設計。理想情況下,您應該在 DB 中沒有資料重復。
但是如果你必須這樣做(出于某種莫名其妙的原因),你可以這樣做(使用組合而不是繼承):
Class SharedData{
String sharedAttr1;
String sharedAttr2;
}
Class A{
SharedData sharedAttributes;
String attrA1;
@OneToMany(). // if you want navigation from A to B
B b;
}
Class B{
SharedData sharedAttributes;
String attrB1;
@ManyToOne // if you want navigation from A to B
@JoinColumn(name="<identity_column_of_A>", nullable=false)
A a;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479458.html
