jpa
सम्मिलित होने की रणनीति
खोज…
पैरामीटर
टिप्पणी | उद्देश्य |
---|---|
@Inheritance | उपयोग की गई वंशानुक्रम रणनीति के प्रकार को निर्दिष्ट करता है |
@DiscriminatorColumn | डेटाबेस में एक कॉलम निर्दिष्ट करता है जिसका उपयोग प्रत्येक इकाई को निर्दिष्ट निश्चित आईडी के आधार पर विभिन्न संस्थाओं की पहचान करने के लिए किया जाएगा |
@MappedSuperClass | मैप किए गए सुपर क्लास लगातार नहीं होते हैं और केवल अपने उपवर्गों के लिए राज्य धारण करते थे। आम तौर पर अमूर्त जावा कक्षाएं @MapperSuperClass के साथ चिह्नित की जाती हैं |
विरासत की रणनीति में शामिल हो गए
एक नमूना वर्ग आरेख, जिसके आधार पर हम जेपीए कार्यान्वयन देखेंगे।
@Entity
@Table(name = "VEHICLE")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "VEHICLE_TYPE")
public abstract class Vehicle {
@TableGenerator(name = "VEHICLE_GEN", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "VEHICLE_GEN")
private int idVehicle;
private String manufacturer;
// getters and setters
}
TransportationVehicle.java
@MappedSuperclass
public abstract class TransportationVehicle extends Vehicle {
private int loadCapacity;
// getters and setters
}
Truck.java
@Entity
public class Truck extends TransportationVehicle {
private int noOfContainers;
// getters and setters
}
PassengerVehicle.java
@MappedSuperclass
public abstract class PassengerVehicle extends Vehicle {
private int noOfpassengers;
// getters and setters
}
Car.java
@Entity
public class Car extends PassengerVehicle {
private int noOfDoors;
// getters and setters
}
Bike.java
@Entity
public class Bike extends PassengerVehicle {
private int saddleHeight;
// getters and setters
}
टेस्ट कोड
/* Create EntityManagerFactory */
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("AdvancedMapping");
/* Create EntityManager */
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
Bike cbr1000rr = new Bike();
cbr1000rr.setManufacturer("honda");
cbr1000rr.setNoOfpassengers(1);
cbr1000rr.setSaddleHeight(30);
em.persist(cbr1000rr);
Car aventador = new Car();
aventador.setManufacturer("lamborghini");
aventador.setNoOfDoors(2);
aventador.setNoOfpassengers(2);
em.persist(aventador);
Truck truck = new Truck();
truck.setLoadCapacity(1000);
truck.setManufacturer("volvo");
truck.setNoOfContainers(2);
em.persist(truck);
transaction.commit();
डेटाबेस आरेख नीचे के रूप में होगा।
इनहेरिटेंस रणनीति में शामिल होने का लाभ यह है कि यह एकल तालिका रणनीति में डेटाबेस स्थान को बर्बाद नहीं करता है। दूसरी ओर, प्रत्येक सम्मिलन और पुनर्प्राप्ति के लिए कई जोड़ शामिल होने के कारण, प्रदर्शन एक मुद्दा बन जाता है जब वंशानुगत पदानुक्रम चौड़ी और गहरी हो जाती है।
स्पष्टीकरण के साथ पूर्ण उदाहरण यहां पढ़ा जा सकता है
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow