亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Spring Data JPA 更新實體中的集合字段?

如何使用 Spring Data JPA 更新實體中的集合字段?

瀟瀟雨雨 2022-11-02 17:26:31
假設我有兩個實體,它們的字段之間有 @ManyToMany 關系。第一個名為Pack的實體:@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})    @JoinTable(name = "card_in_pack",            joinColumns = {@JoinColumn(name = "pack_id")},            inverseJoinColumns = {@JoinColumn(name = "card_id")})    private Set<Card> cards = new HashSet<>();第二個叫Card:@ManyToMany(mappedBy = "cards")private Set<Pack> packs = new HashSet<>();我有一個控制器,我想在其中將新的 Card實體添加到Pack實體中的集合中,然后我想將其全部保存到我的數據庫中,當然還有關系。@PostMapping("/packs/{namePack}")    public String addCard(@Valid Card card, @PathVariable String namePack, @AuthenticationPrincipal User user) {            //Assume I got a Pack instance with name pack            card.setAuthor(user);            pack.addCard(card);            packRepo.save(pack);            return "pack";        }    }看起來每次我嘗試調用packRepo.save(pack)方法時,它都會獲取 Pack 實體中的所有 Card 實體并將它們作為新實體保存到數據庫中,即使其中一些已經存在于我的數據庫中. 我希望它檢查 Pack 實體是否有一組卡片實體,它應該檢查數據庫中是否已經存在具有此類 ID 的每張卡片,并且只添加新卡片。我嘗試清除集合,然后只添加我想要保存的新元素,但隨后它只是從數據庫中刪除了所有不在當前包狀態的內容并只添加新元素我想要保存 @ManyToMany 相關 Set 的最好方法,這樣它就不會在我的數據庫中創建新的重復實例
查看完整描述

1 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

我拿到包的方式真的很糟糕,我什至不會給你看)

有幫助的是:將所有存儲庫邏輯從控制器移動到服務,并用 @transactional 注釋標記它!


查看完整回答
反對 回復 2022-11-02
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號