शायद यह एक बेवकूफ सवाल है लेकिन यह मुझे परेशान कर रहा है।जेपीए - कई रिश्तों में से एक को कायम रखना
मैं वाहन के लिए कर्मचारी के कई रिश्ते के लिए एक दो-तरफा एक है। जब मैं पहली बार डेटाबेस में एक कर्मचारी को जारी रखता हूं (यानी इसमें कोई असाइन आईडी नहीं है) मैं भी अपने संबंधित वाहनों को जारी रखना चाहता हूं।
यह इस समय मेरे लिए ठीक काम करता है, सिवाय इसके कि मेरी सहेजी गई वाहन इकाई स्वचालित कर्मचारी को स्वचालित रूप से मैप नहीं कर रही है, और डेटाबेस में कर्मचारी तालिका में कर्मचारी_आईडी विदेशी कुंजी कॉलम शून्य है।
मेरे सवाल है, यह एक ही समय में कायम कर्मचारी ही कायम की जा रही है वाहन के कर्मचारी के लिए संभव है? मुझे एहसास है कि कर्मचारी को पहले सहेजा जाना होगा, फिर वाहन को बाद में बचाया जाएगा। क्या जेपीए मेरे लिए यह स्वचालित रूप से कर सकता है? या मुझे निम्नलिखित की तरह कुछ करना है:
Vehicle vehicle1 = new Vehicle();
Set<Vehicle> vehicles = new HashSet<Vehicle>();
vehicles.add(vehicle1);
Employee newEmployee = new Employee("matt");
newEmployee.setVehicles(vehicles);
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);
vehicle1.setAssociatedEmployee(savedEmployee);
vehicleDao.persistOrMerge(vehicle1);
धन्यवाद!
संपादित करें: के रूप में अनुरोध किया है, यहाँ है मेरी मैपिंग
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="employee_id")
private Long id;
@OneToMany(mappedBy="associatedEmployee", cascade=CascadeType.ALL)
private Set<Vehicle> vehicles;
...
}
@Entity
public class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="vehicle_id")
private Long id;
@ManyToOne
@JoinColumn(name="employee_id")
private Employee associatedEmployee;
...
}
मैं सिर्फ महसूस किया कि मैं निम्न विधि मेरी कर्मचारी वर्ग पर परिभाषित किया गया है चाहिए (सभी अन्य तरीकों आदि के बिना):
public void addVehicle(Vehicle vehicle) {
vehicle.setAssociatedEmployee(this);
vehicles.add(vehicle);
}
अब उपरोक्त कोड इस तरह दिखेगा:
Vehicle vehicle1 = new Vehicle();
Employee newEmployee = new Employee("matt");
newEmployee.addVehicle(vehicle1);
Employee savedEmployee = employeeDao.persistOrMerge(newEmployee);
बहुत सरल और क्लीनर। हर किसी को आपकी सहायताके लिए शुक्रिया!
ओह, ठीक है। यह काम करता है। लेकिन मैंने सोचा कि ऐसा कोई तरीका हो सकता है जहां मुझे वाहन पर संबंधित कर्मचारी को स्पष्टीकरण की आवश्यकता नहीं है? – JMM
मुझे नहीं लगता कि जेपीए के साथ यह संभव है। मैंने हाइबरनेट का भी उपयोग किया है और अगर मुझे सही याद है तो यह संभव है। – Bobby
मेरे मूल कोड में समस्या को इंगित करने के लिए धन्यवाद, मैंने इसे अपडेट किया है कि मैं इसे कैसे हल करने जा रहा हूं। – JMM