Cómo usar una propiedad de asociación secundaria como clave de mapa en la entidad principal JPA
Estoy teniendo dos entidadesCar
yCarDescription
dóndeCarDescription
depende de otra clave externa de la tablaLanguage
.
Lo que intento lograr es tener unHashMap
enCar
tal que cada vez que tenga unCar
entidad-objeto Puedo acceder a todas las descripciones desde la identificación del idioma.
EntidadCar.java
@Entity
@Table(name = "Car")
public class Car extends AbstractTimestampEntity implements Serializable {
private static final long serialVersionUID = -5041816842632017838L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
private Long id;
@OneToMany(mappedBy="car")
@MapKeyColumn(name = "language_ID")
// @MapKey(name = "language") // does not work either
private Map<Long, CarDescription> carDescription = new HashMap<>(0);
}
EntidadCarDescription.java
@Entity
@Table( name="car_description",
uniqueConstraints = {
@UniqueConstraint(columnNames={"language_id", "name"})
}
)
public class CarDescription extends AbstractTimestampEntity implements Serializable {
private static final long serialVersionUID = 2840651722666001938L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
private Long id;
@NotNull
@ManyToOne
private Car car;
@NotNull
@OneToOne
private Language language;
// ..
}
EntidadLanguage.java
@Entity
public class Language implements Serializable {
private static final long serialVersionUID = 3968717758435500381L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
// ..
}
El problema que tengo es que el mapeo me da un mapa de cadaCarDescription.id
aCarDescription
.
¿Cómo puedo lograr un mapeo correcto?