SCBCD después de mucho!: Primary-Key Classes and Composite Keys

(Henri Matisse - Pintor y Modelo)

The Java Persistenece entity LineItem defines a composite primary key that is defined by the two columns ORDERID and LINEITEM in the database. Which two are true? (Choose two)

  • LineItem must define a primary key class to represent the composite primary key
  • The composite primary key is mapped as two fields in LineItem. No extra primary key class is necesary.
  • The combination os @Embedded and @Embeddable annotations can be used to denote the composite primery key
  • The semantics of the equals and hashCode methods of the primary key must be consistent with the database equality.

Para ciertos mapeos relacionales se requiere que la llave primaria esté compuesta por varias propiedades persistentes, como ilustra la pregunta. Este tipo de llave primaria, como deben de haber visto en su cursillo de base de datos, se llaman claves compuestas. La especificación nos ofrece dos maneras de mapear este tipo de modelos: con la anotación @IdClass o con la anotación @EmbeddedId.

Usando @IdClass, la clase entidad no usa la clase de llave primaria internamente, pero si la utiliza para interactuar con el entity manager. Usamos @IdClass a nivel de clase para especificar la clase de llave primaria a usar. La clase  de llave primaria debe cumplir lo siguiente:

  • Debe ser serializable
  • Debe poseer un constructor sin argumentos
  • Debe implementar equals y hashcode

En el bean, en nuestro caso LineItem,  debemos tener las mismas propiedades que la clase de llave primaria, y estas propiedades deben estar anotadas con @Id.

Otra forma de definir la clase de llave primaria y claves compuestas es incluir la clase de llave primaria directamente en la clase del bean. Para este fin usamos las anotaciones @EmbeddedId y @Embedabble.

Por lo expuesto, la primera y la cuarta opción son correctas.




Pregunta tomada de ExamWorx

Publicar un comentario