मैं परीक्षण के लिए एक बुनियादी उदाहरण पर काम कर रहा हूँ cascade delete
ऑपरेशन लेकिन मुझे अपवाद मिल रहा है।
मेरे पास संस्थाएं हैं:
Employee.java
@Entity
public class Employee {
@Id
@Column(name = "EMP_ID")
private long id;
private String name;
@OneToMany(mappedBy = "employee")
@Cascade(value = { CascadeType.REMOVE, CascadeType.SAVE_UPDATE })
private List<EmpDetails> details = new ArrayList<EmpDetails>();
}
EmpDetails.java
@Entity
public class EmpDetails {
@Id
private long id;
private int info;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "EMP_ID")
private Employee employee;
}
अब मेरे पास कर्मचारी आईडी के साथ डेटाबेस में रिकॉर्ड 10 और कर्मचारी विवरण तालिका में संबंधित रिकॉर्ड हैं।
अब जब मैं क्वेरी नीचे चलाता हूं:
session.beginTransaction();
session.delete(new Employee(10)); // here 10 is the ID of the employee
session.getTransaction().commit();
session.close();
मैं सोच रहा था कि हाइबरनेट कर्मचारी रिकॉर्ड और संबंधित कर्मचारी विवरण रिकॉर्ड हटा देगा क्योंकि मैंने कैस्केड प्रकार को निकालने के लिए सेट किया है। लेकिन मुझे अपवाद मिल रहा है:
के कारण: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: मूल पंक्ति को हटा या अपडेट नहीं कर सकता: एक विदेशी कुंजी बाधा विफल हो जाती है
क्या कोई मेरी मदद कर सकता है कि कैस्केड डिलीट विकल्प का परीक्षण कैसे करें?
उत्तर:
जवाब के लिए 5 № 1रिमूव कैस्केड प्रकार मानक जेपीए के लिए है remove()
ऑपरेशन। मूल Hibernate के लिए delete()
ऑपरेशन, आपको एक का उपयोग करने की आवश्यकता है हाइबरनेट-मालिकाना एनोटेशन:
@Cascade(CascadeType.DELETE)