[英]Spring JPA - post resource in many to one relationships
這個問題是密切相關的這一個(在這里解決這一塊,可能還解決了其他)。
在我的spring mvc 應用程序(github)中,我有兩個資源: Cart
和Item
,其中一個購物車可以有多個項目。
CartController
映射一個 POST 方法,該方法將隨機項目添加到具有給定 ID 的購物車
/* Forgetting about response entity and null checking etc. for now */
@PostMapping("carts/rdm/{id}")
public Cart addRandomItem(@PathVariable("id") long id)
{
String[] rdmItemNames = {"toothbrush", "shampoo", "body wash"};
int rnd = new Random().nextInt(rdmItemNames.length);
String itemName = rdmItemNames[rnd];
// Add new item to the cart with given id
Cart cart = dao.getById(id);
Item item = new Item();
item.setItemName(itemName);
// This works but I have to create a new cart object with same id
Cart sameCart = new Cart();
sameCart.setId(cart.getId());
item.setCart(sameCart);
// This doesn't work, no surprise but I would like to
// just retrieve the Cart, add the new Item and be done.
// item.setCart(cart);
// cart.getItems().add(item);
return dao.save(cart);
}
發布到http://localhost:9100/carts/rdm/1
,我得到以下Cart
json
{
"id": 1,
"items": [
{
"id": 0,
"itemName": "body wash",
"cart": {
"id": 1,
"items": null
}
}
]
}
感覺我沒有正確理解JPA。 這再次歸結為為什么Item
對象需要包含整個Cart
對象。 如果Item
只包含外鍵(購物車 ID),那么我可以生成這樣的 json
{
"id": 1,
"items": [
{
"id": 0,
"itemName": "body wash",
"cart_id": 1
}
]
}
JPA 是一個高級 ORM 框架。 這意味着 java 的對象引用被轉換為數據庫中的關系引用。
因此,在您的數據庫中,您將有一個外鍵,其中項目引用了汽車。
JPA 將這些關系關系轉換為對象關系,這意味着您不僅會獲得汽車的引用,還會獲得汽車對象。
您的 Rest-API 返回包含對象引用的 Java 對象。 這就是為什么您的項目包含汽車對象。
如果只想返回 car_id,則必須將輸出映射到新對象。
我是 REST 的初中生,但我的建議是:創建 CartServices 類。 控制器僅將數據傳輸到服務。 使用@transactional 注釋。 很難讀。 我寫了非常相似的應用程序:如果你想檢查: https : //github.com/justassub/ShopProject/tree/master/RESTserver/src/main/java/lt/it/akademija對不起,這是我的第一個應用程序而不是一切都是英文的。 但它非常相似 - 只有購物車 - 用戶。
當你寫道:
@OneToMany(mappedBy = "cart")
private Set<Item> items;
寫法:
public void addItem(Item item) {
this.items.add(item);
item.setCart(this);
}
然后 Cart.addItem(item); 和其他當然你需要在你的項目列表中創建 getCart/setCart
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.