使用a时,
Map您始终需要关联至少两个实体。假设我们有一个
Owner与该
Car实体相关的实体(
Car具有FK
Owner)。
所以,
Owner就有了
Map的
Car(s):
Map<X, Car>
@MapKey
该
@MapKey会给你
Car's用来集团的物业
Car其
Owner。例如,如果我们在中具有
vin(车辆识别号)属性
Car,则可以将其用作
carMap键:
@Entitypublic class Owner { @Id private long id; @oneToMany(mappedBy="owner") @MapKey(name = "vin") private Map<String, Car> carMap;}@Entitypublic class Car { @Id private long id; @ManyToOne private Owner owner; private String vin;}@MapKeyEnumerated
该
@MapKeyEnumerated会使用枚举从
Car,像
WheelDrive:
@Entitypublic class Owner { @Id private long id; @oneToMany(mappedBy="owner") @MapKeyEnumerated(EnumType.STRING) private Map<WheelDrive, Car> carMap;}@Entitypublic 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
该
@MapKeyTemporal会使用
Date/
Calendar场进行分组,像
createdOn。
@Entitypublic class Owner { @Id private long id; @oneToMany(mappedBy="owner") @MapKeyTemporal(TemporalType.TIMESTAMP) private Map<Date, Car> carMap;}@Entitypublic class Car { @Id private long id; @ManyToOne private Owner owner; @Temporal(TemporalType.TIMESTAMP) @Column(name="created_on") private Calendar createdOn; }@MapKeyJoinColumn
将
@MapKeyJoinColumn需要第三个实体,就像
Manufacturer让你从这样一个联合体
Owner,以
Car与汽车也已经关联到
Manufacturer,让您可以将所有
Owner's
Cars的
Manufacturer:
@Entitypublic class Owner { @Id private long id; @oneToMany(mappedBy="owner") @MapKeyJoinColumn(name="manufacturer_id") private Map<Manufacturer, Car> carMap;}@Entitypublic class Car { @Id private long id; @ManyToOne private Owner owner; @ManyToOne @JoinColumn(name = "manufacturer_id") private Manufacturer manufacturer; }@Entitypublic class Manufacturer { @Id private long id; private String name;}


