当您使用Map 时,您始终需要关联至少两个实体。假设我们有一个与Car 实体相关的Owner 实体(Car 与Owner 有一个FK)。
所以,Owner 将有一个 Map 或 Car(s):
Map<X, Car>
@MapKey
@MapKey 将为您提供Car's 属性,用于将Car 分组到其Owner。例如,如果我们在Car 中有一个vin(车辆识别号)属性,我们可以将其用作carMap 键:
@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
@MapKeyEnumerated 将使用来自Car 的枚举,例如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;
}
这将按照车轮驱动类型对汽车进行分组。
@MapKeyTemporal
@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
@MapKeyJoinColumn 需要第三个实体,例如 Manufacturer,以便您拥有从 Owner 到 Car 的关联,并且 car 还具有与 Manufacturer 的关联,这样您就可以对所有 @987654358 进行分组@CarsManufacturer:
@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;
}