2012-10-16 12 views
12

मेरे उदाहरण में, Employee में OneToOneDepartment से 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 
+0

मैं उम्मीद करेंगे कि DEP_ID OneToOne एनोटेशन (बस एक OneToMany संघ के लिए एक मेज शामिल हों से कई साइड तरह की वजह से अद्वितीय बाधा होता एक अद्वितीय बाधा है इस पर)। क्या कोई बता सकता है कि OneToOne एनोटेशन के बावजूद DEP_ID में इस मामले में एक विशिष्ट बाधा क्यों नहीं है? – Chris

उत्तर

11

जेपीए ऑब्जेक्ट पहचान रखता है और मौजूदा ऑब्जेक्ट को जारी नहीं रखेगा।

बदलें आप कोड, सही होने के लिए

for(int i=1; i <= 10; i++) { 
    Department department = new Department("Test Department"); 
    Employee e = new Employee("EMP" + i, department); 
    em.persist(e); 
} 
+1

हाँ, मुझे पता है, आपका कोडिंग काम करेगा। आप 'कर्मचारी' के लिए 'विभाग' का नया उदाहरण बनाते हैं। मेरी समझ में क्या गलत था? – CycDemo

+0

क्योंकि आपके पास कर्मचारी से विभाग में एक से एक मैपिंग है, कई से एक नहीं। – Erfankam

+8

"जेपीए कैस्केड टाइप.पीर्सआईएसटी कैसे काम करता है?" पर सवाल का जवाब प्राप्त करना दिलचस्प होगा। यही कारण है कि मैंने सवाल देखा। –

संबंधित मुद्दे