【问题标题】:why JPA - foreign key doesn't make error "ERROR 1452: 1452: Cannot add or update a child row: a foreign key constraint fails"为什么 JPA - 外键不会出错“错误 1452:1452:无法添加或更新子行:外键约束失败”
【发布时间】:2020-07-05 23:06:46
【问题描述】:

quote 使用 JPA 时,会出现一个问题,即在没有正确外键的情况下存储。 引用 ( spring - JPA 사용시 올바른 外键 없이도 저장이 되는 문제가 발생 )

关系(加入)是通过 JPA 创建的。 prodDetail.prodNo 有 Prod.no 作为外键。

// 休眠
更改表 prod_detail 添加约束 FKemc8ttnx3c8rl0d3u9s7xr964 外键(无) 参考产品(否)

我认为没有存储 Prod.no 的具有外键-col 的 ProdDetail 对象不会被保存(=插入),但它被保存了。 你可以做相反的事情。为什么?

所以我在 mysql 工作台上试试这个。

错误 1452:1452:无法添加或更新子行:外键约束失败 发生错误

为什么JPA没有错误?

这是我的代码

请帮助我。 (如果你是韩国人?请用韩语跟我说话) 谢谢~

@Entity
public class Prod {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "no")
    private Long no;
    private String name;
    private String thumbnailUrl;
    private Long originPrice;
    private Long discPrice;
    private String description;
    private LocalDateTime createdAt;
    @Transient
    private boolean inBasket;
}
-----------------------------------------------------
@Entity
public class ProdDetail {

    @Id
    @GeneratedValue
    private Long id;
    private String content;
    private String imageUrl;
    private LocalDateTime createdAt;

    @PrePersist
    public void createdAt() {
        this.createdAt = LocalDateTime.now();
    }

    @ManyToOne
    @JoinColumn(name="prod_no" )
    private Prod prod;

-----------------------------------------------------


    // jUnit test
    @Test
        public void insertTodetailTest() {
            ProdDetail pd = new ProdDetail();
            pd.setContent("test product 1");
            pd.setImageUrl("test Product url");
            detailRepo.save(pd);
            System.out.println("ok");
        }

【问题讨论】:

    标签: jpa


    【解决方案1】:

    为什么会失败?约束说:“prod_detail 列必须对应于prod (no) 列中的某个值”。不过,它确实说“必须提供prod_detail”。

    NOT NULL 约束添加到prod_detail (@JoinColumn(nullable = false)) 以及运行时检查@ManyToOne(optional = false),问题应该会消失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-10
      • 2015-02-04
      • 2013-06-11
      • 2019-03-29
      • 2018-05-14
      • 2013-05-11
      • 2013-09-28
      • 1970-01-01
      相关资源
      最近更新 更多