-
Notifications
You must be signed in to change notification settings - Fork 14
Relación compuesta (composite) OneToMany ManyToOne
En este ejemplo se tienen dos clases Ciudadano (Citizen) y Licencia de conducción (DriverLicense). En el modelo conceptual se indica que un ciudadano tiene varias licencias de conducción (una por categoría, por ejemplo), pero que una licencia de conducción solo le pertenece a un ciudadano.
Nótese que la relación de tipo composite implica que no es posible crear una licencia de conducción de forma aislada, sino que que debe estar asociada a un ciudadano.
En la transformación al modelo de entidades se deben crear dos asociaciones: una asociación entre CitizenEntity y DriverLicenseEntity denominada driverLicences, y una asociación entre DriverLicenseEntity y CitizenEntity llamada citizen.
En la asociación driverLicences, la cardinalidad se establece como OneToMany (un ciudadano tiene varias licencias). En el atributo "Cascade" de la relación se establece el valor "PERSIST". Además, si una licencia de conducción queda "huérfana", es decir si se elimina el ciudadano al que pertenece, esta licencia también debe eliminarse, por eso se marca la opción Orphan removal.
En la asociación citizen, la cardinalidad se establece como ManyToOne (varias licencias pertenecen a un ciudadano).
Este es el código en Java que representa a cada entidad:
@Entity
public class CitizenEntity extends BaseEntity implements Serializable {
private String name;
//...
@PodamExclude
@OneToMany(
mappedBy = "citizen",
cascade = CascadeType.PERSIST,
fetch = FetchType.EAGER,
orphanRemoval = true
)
private List<DriverLicenseEntity> driverLicenses =
new ArrayList<DriverLicenseEntity>();
//...
}
@Entity
public class DriverLicenseEntity extends BaseEntity implements Serializable {
private String category;
@Temporal(TemporalType.DATE)
@PodamStrategyValue(DateStrategy.class)
private Date dueDate;
@PodamExclude
@ManyToOne
private CitizenEntity citizen;
//...
}
Un video con el paso a paso de la explicación puede consultarse en este link
Esta wiki fue creada para el curso ISIS2603 Desarrollo de Software en Equipos en la Universidad de los Andes. Desarrollado por Rubby Casallas con la colaboración de César Forero, Kelly Garcés, Jaime Chavarriaga y José Bocanegra. Universidad de los Andes, Bogotá, Colombia. 2021.
- Instalación del ambiente en máquina propia
- Configuración de la máquina virtual
- Ejecución del back
- Uso de Codespaces
- Clases
- Herencia
- Asociaciones
- Tipos de asociaciones
- Caso de estudio: la biblioteca
- Caso de estudio: la empresa
- Java Persistence API (JPA)
- Implementación paso a paso persistencia
- Ejemplo implementación persistencia
- Carga de datos en el Backend
- Relaciones compartidas (Shared) OneToOne
- Relaciones compartidas (Shared) OneToMany/ManyToOne
- Relaciones compuestas (Composite) OneToMany/ManyToOne
- Conceptos básicos de REST
- Diseño API REST
- Tutorial documentación diseño API
- Implementación API REST con Spring
- Tutorial implementación API