当您使用Map
您始终需要关联至少两个实体。假设我们有一个Owner
涉及到的实体Car
实体 (Car
有一个 FK 到Owner
).
So, the Owner
将有一个Map
of Car(s)
:
Map<X, Car>
@MapKey
The @MapKey
会给你Car's
用于对 a 进行分组的属性Car
to its Owner
。例如,如果我们有一个vin
(车辆识别号)属性Car
,我们可以用它作为carMap
key:
@Entity
public class Owner {
@Id
private long id;
@OneToMany(mappedBy="owner")
@MapKey(name = "vin")
private Map<String, Car> carMap;
}
@Entity
public class Car {
@Id
private long id;
@ManyToOne
private Owner owner;
private String vin;
}
@MapKeyEnumerated
The @MapKeyEnumerated
将使用来自的枚举Car
, like WheelDrive
:
@Entity
public class Owner {
@Id
private long id;
@OneToMany(mappedBy="owner")
@MapKeyEnumerated(EnumType.STRING)
private Map<WheelDrive, Car> 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;
}
这将按 WheelDrive 类型对汽车进行分组。
@MapKeyTemporal
The @MapKeyTemporal
将使用一个Date
/Calendar
分组字段,例如createdOn
.
@Entity
public class Owner {
@Id
private long id;
@OneToMany(mappedBy="owner")
@MapKeyTemporal(TemporalType.TIMESTAMP)
private Map<Date, Car> carMap;
}
@Entity
public class Car {
@Id
private long id;
@ManyToOne
private Owner owner;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="created_on")
private Calendar createdOn;
}
@MapKeyJoinColumn
The @MapKeyJoinColumn
需要第三个实体,例如Manufacturer
这样你就可以与来自Owner
to Car
和汽车也有关联Manufacturer
,这样你就可以将所有Owner's
Cars
by Manufacturer
:
@Entity
public class Owner {
@Id
private long id;
@OneToMany(mappedBy="owner")
@MapKeyJoinColumn(name="manufacturer_id")
private Map<Manufacturer, Car> 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;
}