Skip to content

Relación compartida (shared) OneToMany ManyToOne

José Bocanegra edited this page Feb 13, 2020 · 2 revisions

En este ejemplo se tienen dos entidades Ciudad (City) y Carro (Car). En el modelo conceptual se indica que en una ciudad se registran varios carros, pero que un carro solo se puede registrar en una ciudad.

Nótese que la relación de tipo shared implica que tanto ciudad como carro pueden existir independientemente. Es decir, se puede crear un carro sin asociarlo obligatoriamente a una ciudad; o se puede crear una ciudad sin asociarle ningún carro.

ConceptualModel

En la transformación al modelo de entidades se deben crear dos asociaciones: una asociación entre CityEntity y CarEntity denominada cars, y una asociación entre CarEntity y CityEntity llamada city.

En la asociación cars, la cardinalidad se establece como OneToMany (una ciudad tiene registrado muchos carros). Nótese que no se define ningún tipo de propiedadad para el atributo "Cascade" de la relación, dado que cada entidad se persiste por su lado.

Imgur

En la asociación city, la cardinalidad se establece como ManyToOne (muchos carros se registran en una ciudad).

Este es el código en Java que representa a cada entidad:

@Entity
public class CityEntity extends BaseEntity implements Serializable
{
    private String name;
    
    //...

    @PodamExclude
    @OneToMany(mappedBy = "city")
    private List<CarEntity> cars = new ArrayList<CarEntity>();

    //... 
}
@Entity
public class CarEntity extends BaseEntity implements Serializable
{
    
    private String plate;
    
    private Integer model;
    
    @PodamExclude
    @ManyToOne
    private CityEntity city;

    //...
    
}

Un video con el paso a paso de la explicación puede consultarse en este link

Clone this wiki locally