我正在尝试在 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/