我试图以两种方式添加Map实体:
Map:
@Entity
@Table(name = "reservations")
public class Reservation {
...
private Map<Request, RequestImportance> guestsRequests;
...
}Map
public class Room {
...
private Map<Request, Boolean> requestsMap;
}这些是枚举请求和RequestImportance:
public enum Request {
ELEVATORPROXIMITY,
SEAVIEW,
BATHTUB,
BALCONY,
HANDICAPPED,
HIGHFLOOR
}
public enum RequestImportance {
NOT_IMPORTANT,
NICE_TO_HAVE,
MUST;
}我不确定应该使用哪些属性来映射到DB。
我在这个项目中使用mySQL。
编辑:
可能不可能这样做。我想我应该将Map更改为一个列表,并创建一个包含Enum字段的新类。这样,我就可以表示DB中的数据。
发布于 2022-07-20 09:20:31
你可以用@ElementCollection
@ElementCollection
private Map<Request, RequestImportance> guestsRequests = new HashMap<>();默认情况下,它被映射到具有三列的表reservation_guests_requests。
reservation_id (显然是指Reservation )guests_requests_key (包含Request序号)guests_requests (包含RequestImportance序号)如果您对这些名称不满意,或者需要适合现有的表,则可以对它们进行调整。
@ElementCollection
@CollectionTable(
name = "guests_requests",
joinColumns = @JoinColumn(name = "rsrv_id")
)
@MapKeyColumn(name = "request_n")
@Column(name = "request_importance_n")
private Map<Request, RequestImportance> guestsRequests = new HashMap<>();这一次将是guests_requests与
rsrv_id (我想reservation_id是一个更好的名字,只是显示了调整它的可能性)request_nrequest_importance_n一方面,保存枚举顺序很好,另一方面它对其顺序很敏感,如果对值进行重新排序,可能会产生问题。
幸运的是,它可以切换到String、任何自定义索引或带有AttributeConverter的缩写。如果将@Enumerated(EnumType.STRING)放在地图的上方,它只会影响值,即RequestImportance
https://stackoverflow.com/questions/73047634
复制相似问题