![](/img/trans.png)
[英]getting java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
[英]Hibernate: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
我正在嘗試在 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>
運行 CLass
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
實體本身一起插入數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.