error sql错误:1452,sqlstate:23000,使用hibernate和javafx

31moq8wy  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(351)

我在尝试将数据保存到包含外键列的表中时遇到此错误。
这是我的场景我从两个不同的组合框中选择了两个选项(每个组合框中有一个选项),我编写了两个字符串,所有这些都是为了构建要保存的对象,但是在提交时我得到了以下错误:
警告sqlexceptionhelper-sql错误:1452,sqlstate:23000错误sqlexceptionhelper-无法添加或更新子行:外键约束失败( students . student ,约束 fk_student_career 外键( student_career )参考文献 career ( career_name )删除时无操作更新时无操作)错误异常Apperstandardimpl-hh000346:托管刷新期间出错[org.hibernate.exception.constraintviolationexception:could not execute statement]
这些是我的类,我把它们放在我的gists存储库中,让这篇文章简短一点。
我已经遵循了许多教程,并阅读了大量的信息,但不能设法使它的工作。我用过cascadetype,joincolumn和很多其他的东西,但都失败了。。。
请帮帮我。。。
p、 学生:我在自学,这是一种实践。

lf3rwulv

lf3rwulv1#

改变 Student 类Map(我只包含了相关部分)到:

@Entity
@Table(name = "student", catalog = "students")
public class Student implements java.io.Serializable {

    ...

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "student_career",referencedColumnName="career_name" nullable = false)
    private Career career;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "student_section", nullable = false)
    private Section section;

    ...
}

referencedcolumnname用于显式Map Career 正确列的外键 career_name 而不是它的id career_id ,有关详细信息,请查看此相关问题。
已添加cascadetype.persist以将两者保存到 Career 以及 Section 保存时 Student ,否则,数据库将找不到 Student 的外键,(我想,这就是 SqlExceptionHelper )

相关问题