SCBCD del Día: Entity Inheritance

(Imagen: Henri Matisse - Mujer en saco púpura)

A developer wants to have bookingDate in table BOOKING, flightNUmber in table FLIGHTBOOKING and hotelName in table HOTELBOOKING. Which code, inserted at Line 11 of class Booking is appropiate for this strategy?

10. @Entity
11. //insert code here
12. public class Booking{
13. private Date bookingDate;

15. @Entity
16. public class FlightBooking extends Booking{
17. private String flightNumber;

20. @Entity
21. public class HotelBooking extends Booking {
22. private String hotelName;

  • @Joined
  • @SingleTable
  • @TablePerClass
  • @Inheritance(strategy=JOINED)
  • @Inheritance(strategy=SINGLE_TABLE)
  • @Inheritance(strategy=TABLE_PER_CLASS)

La especificación de persistencia de Java nos brinda tres maneras diferentes de "mapear" una jerarquía de herencia en una base de datos relacional

Una tabla por jerarquía de clases: Una tabla tendrá todas las propiedades de cada clase en la jerarquía

Una tabla por clase concreta: Cada clase tendrá dedicada una tabla, con todas sus propiedades y las propiedades de sus superclases en esta tabla

Y la que nos interesa, una tabla por subclase, donde cada subclase tiene su propia tabla, pero esta tabla contiene sólamente las propiedades definidas para esta clase en particular. Así como está especificado en la pregunta.En otras palabras, es similar a la estrategia anterior (TABLE_PER_CLASS), sólo que normalizada. A esta estrategia también se le llama JOINED. Por ejemplo, para las entidades EMPLOYEE, CUSTOMER y person:

@Entity
@Inheritance (strategy=InheritanceType.JOINED)
public class Person {
...
}

@Entity
public class Customer extends Person {
...
}

@Entity
@PrimaryKeyJoinColumn (name="EMP_PK")
public class Employee extends Customer{
...
}

A estas alturas, ya se habrán dado cuenta que la cuarta es la correcta.

Publicar un comentario