gpt4 book ai didi

java - Hibernate:java.sql.SQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败

转载 作者:行者123 更新时间:2023-12-01 16:29:50 25 4
gpt4 key购买 nike

我正在尝试在 Jpa 中创建一对一的关系。当我运行这个程序时抛出异常

ERROR: Cannot add or update a child row: a foreign key constraint fails (`ngsharma`.`student`, CONSTRAINT `FK8nqh8nm4hrwx9hlqwhxf6kfen` FOREIGN KEY (`laptop_lid`) REFERENCES `laptop` (`lid`))

学生

@Entity(name = "student")
public class Student {

@Id
private int rollno;
private String name;
@OneToOne
private Laptop laptop;

/*Setter & Getter*/
}

笔记本电脑

@Entity(name = "laptop")
public class Laptop {

@Id
private int lid;
private String laptopName;

/*Setter & Getter*/
}

Hibernate.cfg.xml

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ngsharma</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MariaDBDialect</property>
<property name="hbm2ddl.auto">create</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>

运行类

    Configuration configuration = 
new Configuration().configure()
.addAnnotatedClass(Student.class).addAnnotatedClass(Laptop.class);

SessionFactory sessionFactory = configuration.buildSessionFactory();

Session session = sessionFactory.openSession();

Laptop laptop = new Laptop();
laptop.setLid(101);
laptop.setLaptopName("Mac Nootbook");

Student student = new Student();
student.setRollno(1);
student.setName("Shri Krishan");
student.setLaptop(laptop);

Serializable serializable = session.save(student);
System.out.println("Test Code : " + serializable);

session.beginTransaction().commit();

最佳答案

在您的示例中,您尝试保存一个 student 实体,而数据库中不存在该实体的 laptop 关联。据您提供的代码片段了解,这两个实例都是新创建的。因此,根据数据库级别的外部约束,您尝试从 student 表中引用 laptop 表;其中引用 id 的相应 laptop 行不存在。

如果您在保留 student 实体的同时还保留了关联的 laptop 实体,您的问题将得到解决。您需要做的唯一修改是将 @OneToOne 关系更新为:

    @OneToOne(cascade=CascadeType.PERSIST)  
private Laptop laptop;

这会起作用;因为它还会将 laptop 实体与 student 实体本身一起插入数据库。

关于java - Hibernate:java.sql.SQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62071628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com