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

菲利普·伊特金

假设我有两个实体,它们的字段之间有 @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<>();

我有一个控制器,我想在其中Pack实体中的集合添加新的 Card实体,然后我想将其全部保存到我的数据库中,当然还有关系。

@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 相关集,这样它就不会在我的数据库中创建新的重复实例

菲利普·伊特金

我拿到包的方式真的很糟糕,我什至不会给你看这个)

有帮助的是:将所有存储库逻辑从控制器移动到服务,并用@transactional 注释标记它!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何使用Spring Data Jpa实现保存或更新功能?

来自分类Dev

通过Spring Data JPA执行批量更新时如何更新@Version字段

来自分类Dev

如何使用XML配置Spring Data JPA

来自分类Dev

在Spring-data JPA中,如何使用名称中的下划线“ _”映射类属性

来自分类Dev

使用Spring Data JPA更新实体的正确方法是什么?

来自分类Dev

集合中的spring data jpa查询值

来自分类Dev

@CreatedBy在Spring Data JPA中如何工作?

来自分类Dev

如何在Spring Data JPA中设置Hibernate命名策略

来自分类Dev

如何使用Spring Data Jpa进行批量更新?

来自分类Dev

如何使用Spring Data JPA方法在Kotlin的try-with-resources块中返回Stream?

来自分类Dev

如何使用JPA和Spring Data Rest管理一对多实体

来自分类Dev

如何使用Spring Data / JPA插入Postgres Array类型列中?

来自分类Dev

Spring Data JPA。对子实体的分页

来自分类Dev

如何在Spring Data JPA中向现有实体添加新字段/值

来自分类Dev

Spring Data JPA:使用@Query中的属性作为参数

来自分类Dev

Spring Data JPA:如何在集合中查找一列?

来自分类Dev

Spring Data JPA中的saveAndFlush

来自分类Dev

如何在Spring Data JPA中向现有实体添加新字段/值

来自分类Dev

Spring Data JPA:如何优雅地更新模型?

来自分类Dev

如何使用Spring Data JPA方法在Kotlin的try-with-resources块中返回Stream?

来自分类Dev

如何使用JPA和Spring Data Rest管理一对多实体

来自分类Dev

如何使用Spring Data JPA按实体类名称从表中获取数据

来自分类Dev

如何使用Spring JPA存储库仅更新特定字段?

来自分类Dev

使用 Spring Data Jpa 中的 CrudRepository 时如何修复 NoSuchBeanDefinitionException?

来自分类Dev

Spring Data JPA/REST 更新子集合

来自分类Dev

使用 Spring 和 Spring Data 更新集合中的对象

来自分类Dev

在 Spring JPA 中使用 Spring Data JPA 的问题

来自分类Dev

Spring Data JPA - for 循环不保存实体

来自分类Dev

如何使用 Spring Data JPA 过滤 OneToMany 字段?

Related 相关文章

  1. 1

    如何使用Spring Data Jpa实现保存或更新功能?

  2. 2

    通过Spring Data JPA执行批量更新时如何更新@Version字段

  3. 3

    如何使用XML配置Spring Data JPA

  4. 4

    在Spring-data JPA中,如何使用名称中的下划线“ _”映射类属性

  5. 5

    使用Spring Data JPA更新实体的正确方法是什么?

  6. 6

    集合中的spring data jpa查询值

  7. 7

    @CreatedBy在Spring Data JPA中如何工作?

  8. 8

    如何在Spring Data JPA中设置Hibernate命名策略

  9. 9

    如何使用Spring Data Jpa进行批量更新?

  10. 10

    如何使用Spring Data JPA方法在Kotlin的try-with-resources块中返回Stream?

  11. 11

    如何使用JPA和Spring Data Rest管理一对多实体

  12. 12

    如何使用Spring Data / JPA插入Postgres Array类型列中?

  13. 13

    Spring Data JPA。对子实体的分页

  14. 14

    如何在Spring Data JPA中向现有实体添加新字段/值

  15. 15

    Spring Data JPA:使用@Query中的属性作为参数

  16. 16

    Spring Data JPA:如何在集合中查找一列?

  17. 17

    Spring Data JPA中的saveAndFlush

  18. 18

    如何在Spring Data JPA中向现有实体添加新字段/值

  19. 19

    Spring Data JPA:如何优雅地更新模型?

  20. 20

    如何使用Spring Data JPA方法在Kotlin的try-with-resources块中返回Stream?

  21. 21

    如何使用JPA和Spring Data Rest管理一对多实体

  22. 22

    如何使用Spring Data JPA按实体类名称从表中获取数据

  23. 23

    如何使用Spring JPA存储库仅更新特定字段?

  24. 24

    使用 Spring Data Jpa 中的 CrudRepository 时如何修复 NoSuchBeanDefinitionException?

  25. 25

    Spring Data JPA/REST 更新子集合

  26. 26

    使用 Spring 和 Spring Data 更新集合中的对象

  27. 27

    在 Spring JPA 中使用 Spring Data JPA 的问题

  28. 28

    Spring Data JPA - for 循环不保存实体

  29. 29

    如何使用 Spring Data JPA 过滤 OneToMany 字段?

热门标签

归档