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 Car
podrí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 Car
me 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 Manufacturer
para que puedas agrupar todos Owner's
Cars
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;