Saltar al contenido

Diferencia entre @MapKey, @MapKeyColumn y @MapKeyJoinColumn en JPA e Hibernate

Te doy la bienvenida a nuestra web, en este sitio encontrarás la solucíon a lo que necesitas.

Solución:

Cuando usas un Map siempre necesita asociar al menos dos entidades. digamos que tenemos un Owner entidad que se relaciona con la Car entidad (Car tiene un FK para Owner).

Entonces el Owner tendrá un Map de Car(s):

Map

@MapKey

los @MapKey te dará la Car's propiedad utilizada para agrupar a Car a su Owner. Por ejemplo, si tenemos un vin (Número de identificación del vehículo) propiedad en Carpodríamos usarlo como el carMap key:

@Entity
public class Owner 
    @Id
    private long id;

    @OneToMany(mappedBy="owner")
    @MapKey(name = "vin")
    private Map carMap;


@Entity
public class Car 
    @Id
    private long id;

    @ManyToOne
    private Owner owner;

    private String vin;


@MapKeyEnumerated

los @MapKeyEnumerated utilizará un Enum de Carme gusta WheelDrive:

@Entity
public class Owner 
    @Id
    private long id;

    @OneToMany(mappedBy="owner")
    @MapKeyEnumerated(EnumType.STRING)
    private Map carMap;


@Entity
public class Car 
    @Id
    private long id;

    @ManyToOne
    private Owner owner;

    @Column(name = "wheelDrive")
    @Enumerated(EnumType.STRING)
    private WheelDrive wheelDrive;



public enum WheelDrive 
    2WD, 
    4WD;             

Esto agrupará los autos por su tipo de WheelDrive.

@MapKeyTemporal

los @MapKeyTemporal utilizará un Date/Calendar campo para agrupar, como createdOn.

@Entity
public class Owner 
    @Id
    private long id;

    @OneToMany(mappedBy="owner")
    @MapKeyTemporal(TemporalType.TIMESTAMP)
    private Map carMap;


@Entity
public class Car 
    @Id
    private long id;

    @ManyToOne
    private Owner owner;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="created_on")
    private Calendar createdOn;         

@MapKeyJoinColumn

los @MapKeyJoinColumn requiere una tercera entidad, como Manufacturer para que tengas una asociación de Owner a Car y el automóvil también tiene una asociación con un Manufacturerpara que puedas agrupar todos Owner'sCars por Manufacturer:

@Entity
public class Owner 
    @Id
    private long id;

    @OneToMany(mappedBy="owner")
    @MapKeyJoinColumn(name="manufacturer_id")
    private Map carMap;


@Entity
public class Car 
    @Id
    private long id;

    @ManyToOne
    private Owner owner;

    @ManyToOne
    @JoinColumn(name = "manufacturer_id")
    private Manufacturer manufacturer;          


@Entity
public class Manufacturer 
    @Id
    private long id;

    private String name;

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *