当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA从多对多关系删除问题

赵越
2023-03-14

在我的项目中,我使用Spring数据jpa。我有多对多关系的表格。我的实体:

    @Entity
    @Table(name = "SPEC")
    public class SpecJpa {
        @Id
        private int id;
        @Column(name = "NAME")
        private String name;
        @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
        @JoinColumn(name = "Creator_ID", unique = false, nullable = false, updatable = true)
        private UsersJpa usersJpa;
        @Column(name = "DESCRIPTION")
        private String description;


        @ManyToMany(fetch = FetchType.EAGER)
        @JoinTable(name="SPEC_PARTS",
                joinColumns = @JoinColumn(name="ID_PARTS", referencedColumnName="id"),
                inverseJoinColumns = @JoinColumn(name="ID_SPEC", referencedColumnName="id")
        )
    private Set<PartsJpa> partsJpa;
    //---------------

和零件:

@Entity
@Table(name = "PARTS")
public class PartsJpa {
    @Id
    private int id;
    @Column(name = "NAME")
    private String name;
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "ID_EXPORT", unique = false, nullable = false, updatable = true)
    private ExportJpa exportJpa;
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "ID_TYPE", unique = false, nullable = false, updatable = true)
    private TypesJpa typesJpa;

    @Column(name = "DESCRIPTION")
    private String description;

    @ManyToMany(fetch = FetchType.EAGER)

    private Set<SpecJpa> specJpa;

现在在Controller中,我尝试从表部分中删除一行:

@PostMapping("deletePart")
public String deletePart(@RequestParam String id, Model model) {
    partsService.deleteById(Integer.parseInt(id));
    return "redirect:/parts";

} 

但我有例外:

区分完整性约束冲突:“FK9Y4MKICYBLJWPENACP4298I49:PUBLIC.PARTS外键(ID\u导出)引用PUBLIC.EXPORT(ID)(1)”;SQL语句:/*删除com.aleksandr0412.demo.entitiesjpa。ExportJpa/delete from EXPORT where id=?[23503-200]],SQL:/删除com.aleksandr0412.demo.entitiesjpa。ExportJpa*/delete from EXPORT where id=?2020-05-25 19:16:31.630警告13387---[nio-8080-exec-4]o.h.engine.jdbc.spi。SqlExceptionHelper:SQL错误:23503,SQLState:23503

在这个实体的数据库中,我有3个表:Parts、Spec和Spec\u Parts。据我所知,要解决这个问题,首先应该删除表spec_部分中的行,然后可以从表部分中删除行。我该怎么做?

共有1个答案

闻深
2023-03-14

在您的partsService实现中,我建议您首先使用给定的id从控制器获取要删除的资源(即PartsJpa)。接下来将其specJpa设置为null或emptySet,然后调用delete方法。

为此,请确保正确实现了方法setSpecJpa(SpecJpa SpecJpa)和setPartJpa(PartJpa PartJpa)。

我希望你觉得这有帮助。

 类似资料:
  • 我希望在消费者和政策这两个实体之间建立一对多关系。一个消费者应该有几个政策。 这是我想要的一个消费JSON对象的例子: 这就是我到目前为止所做的: 政策实体 消费者实体 我想没那么难,但我已经试了几个小时了,还是做不到。我刚到Spring,所以如果有人能帮助我,我会非常感激!

  • 我在Spring Data JPA中有两个实体: 目标是获取与user\u id相关的所有税款: User.java 税务ayment.jva 我不想要一个太多的注释从User.java和列映射在纳税user_id。 规格等级如下: 根据我获取所有与user\u id相关的税款的目标,规范是正确的还是错误的?

  • DataUpload实体 DataUpload存储库 为了删除数据上传,我尝试执行存储库的两个查询方法:

  • 复制和粘贴我前面问题的一些介绍部分。 我在Eclipselink2.3.2中使用JPA2.0,在其中,我在产品和它们的颜色之间建立了多对多的关系。一个产品可以有多种颜色,一种颜色可以与多种产品相关联。这种关系在数据库中由三个表表示。 null 实体类。

  • 问题内容: 我要删除具有多对多关系的一个站点上的表中的一行。我还想删除该关系另一侧的所有相关行。 例如,假设我有以下表格,并且想从中删除一行。我也想从中删除所有相关的行,当然,也删除其中不再需要的任何行。 我知道如何在查询中连接以上表格。但是我看不到如何删除整个关系中的数据。 注意:关系的两端都实现级联删除。因此,例如,从中删除行将删除中的任何相关行。但是显然,这不会传播到表中。 问题答案: 我认