मेरे उदाहरण में, Employee
में OneToOne
Department
से CascadeType.PERSIST
के साथ संबंध है। जब मैं कई Employee
, जारी रहती हैजेपीए कैस्केड टाइप। PERSIST कैसे काम करता है?
क्यों EntityManager
सभी Employee
रिकॉर्ड के लिए एक एकल Department
रिकॉर्ड जारी रहती है?
मेरे उम्मीद, अगर हम CascadeType.PERSIST
, जब एक Employee
कायम किया जा रहा है, एक Department
रिकॉर्ड प्रत्येक Employee
रिकार्ड के लिए नए सिरे से बनाया जाएगा का उपयोग करें।
Employee.java
@Entity
public class Employee {
private String id;
private String name;
@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "DEP_ID", referencedColumnName = "ID")
private Department department;
-----
}
Department.java
@Entity
public class Department implements Serializable {
private String id;
private String name;
}
Test.java
public void insert() {
em = emf.createEntityManager();
em.getTransaction().begin();
Department department = new Department("Test Department");
for(int i=1; i <= 10; i++) {
Employee e = new Employee("EMP" + i, department);
em.persist(e);
}
em.getTransaction().commit();
em.close();
}
परिणाम:
Employee Table Department Table
================= ==============================
ID Name DEP_ID ID NAME
================= ==============================
1 EMP1 1 1 Test Department
2 EMP2 1
3 EMP3 1
4 EMP4 1
5 EMP5 1
6 EMP6 1
7 EMP7 1
8 EMP8 1
9 EMP9 1
10 EMP10 1
मैं उम्मीद करेंगे कि DEP_ID OneToOne एनोटेशन (बस एक OneToMany संघ के लिए एक मेज शामिल हों से कई साइड तरह की वजह से अद्वितीय बाधा होता एक अद्वितीय बाधा है इस पर)। क्या कोई बता सकता है कि OneToOne एनोटेशन के बावजूद DEP_ID में इस मामले में एक विशिष्ट बाधा क्यों नहीं है? – Chris