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

Spring Data@OneTomany与@Jointable的关系-如何修复外键约束冲突?

任宾鸿
2023-03-14

当使用Spring数据@OneTomany关系和@Jointable时,如何修复外键约束冲突?

@Entity
@Data
public class Email {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "email_seq")
    @SequenceGenerator(name = "email_seq", sequenceName = "email_seq")
    private Long id;

    @NotNull
    private String title;

    @OneToMany
    @JoinTable(
            name = "email_attachment",
            joinColumns = @JoinColumn(name = "EMAIL_ID"),
            inverseJoinColumns = @JoinColumn(name = "ATTACHMENT_ID")
    )
    private List<Attachment> attachments;

    ...
}

@Entity
@Data
public class Attachment {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "attachment_generator")
    @SequenceGenerator(name = "attachment_generator", sequenceName = "attachment_seq")
    private Long id;

    ...
}

当我尝试像这样删除附件时:

attachmentRepository.delete(id)

它会抛出以下错误:

错误:表“Attachment”上的update或delete违反表“Email_Attachment”上的外键约束“Email_Attachment_Attachment_ID_FKEY”详细信息:键(id)=(6)仍然从表“Email_Attachment”中引用。

共有1个答案

傅俊德
2023-03-14

您还需要使用@ManyToOneAttachment中创建关系。

Attachment.java

@Entity
@Data
public class Attachment {
    // ...

    @ManyToOne(mappedBy = "attachments")
    private Email email;

    // ...
}
 类似资料:
  • 用户表: 图书目录: 用户模型中的关系: 默认情况下,外键指向主键id。如何使其指向唯一的? 如果只有,是主键,我们可以用第三个参数传递它,并覆盖属性:

  • 我正在使用JPA(Hibernate)并试图用childs和复合键持久化整个新实体,但当持久化childs时,我在键中得到了null。表结构: 映射:

  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除

  • 问题内容: 我有两个表,和。应该是不言自明的,并且包含所有变量的所有可能选择。 有一个外键,指出了它是哪个变量的选项。有一个外键,指出了当前选择的选项。 我用得到周围的循环关系上,并在“关系。但是,我想添加一个额外的数据库约束,以确保该约束是有效的(即,它所指的是一个引用它的选项)。 我需要的逻辑(假设它代表表中的一行)基本上是: 但是我不知道如何使用SQL,声明式或任何其他方法来构造这种约束。如

  • 无法添加或更新子行:外键约束失败(.,约束外键()引用()) 如果我删除,insert操作将会很好地工作。在将对象插入数据库之前,我检查了这些对象,并确保包含,包含。 用于创建和的SQL脚本为: Hibernate:创建表b(b_id integer not null auto_increment,string_results longtext,a_id integer,主键(b_id)) Hib

  • 问题内容: 为什么没有一个 TRUNCATE 上工作?即使我知道了: 错误1701(42000):无法截断在外键约束中引用的表(。,CONSTRAINT FOREIGN KEY()参考。()) 问题答案: 您不能在上面应用FK约束的表(与相同)。 要变通解决此问题,使用这些解决方案之一。两者都存在破坏数据完整性的风险。 选项1: 消除约束 执行 手动删除现在 无处* 引用的行 * 创建约束 选项2