首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA: Map<Enum,Enum> & Map<Enum,Boolean>

JPA: Map<Enum,Enum> & Map<Enum,Boolean>
EN

Stack Overflow用户
提问于 2022-07-20 07:34:42
回答 1查看 60关注 0票数 0

我试图以两种方式添加Map实体:

Map:

代码语言:javascript
复制
@Entity
@Table(name = "reservations")
public class Reservation {
...
       private Map<Request, RequestImportance> guestsRequests;
...
}

Map

代码语言:javascript
复制
public class Room {
    ...
    private Map<Request, Boolean> requestsMap;
}

这些是枚举请求和RequestImportance:

代码语言:javascript
复制
public enum Request {
    ELEVATORPROXIMITY,
    SEAVIEW,
    BATHTUB,
    BALCONY,
    HANDICAPPED,
    HIGHFLOOR
}

public enum RequestImportance {
    NOT_IMPORTANT,
    NICE_TO_HAVE,
    MUST;
}

我不确定应该使用哪些属性来映射到DB。

我在这个项目中使用mySQL。

编辑:

可能不可能这样做。我想我应该将Map更改为一个列表,并创建一个包含Enum字段的新类。这样,我就可以表示DB中的数据。

EN

回答 1

Stack Overflow用户

发布于 2022-07-20 09:20:31

你可以用@ElementCollection

代码语言:javascript
复制
@ElementCollection
private Map<Request, RequestImportance> guestsRequests = new HashMap<>();

默认情况下,它被映射到具有三列的表reservation_guests_requests

  • reservation_id (显然是指Reservation )
  • guests_requests_key (包含Request序号)
  • guests_requests (包含RequestImportance序号)

如果您对这些名称不满意,或者需要适合现有的表,则可以对它们进行调整。

代码语言:javascript
复制
@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_n
  • request_importance_n

一方面,保存枚举顺序很好,另一方面它对其顺序很敏感,如果对值进行重新排序,可能会产生问题。

幸运的是,它可以切换到String、任何自定义索引或带有AttributeConverter的缩写。如果将@Enumerated(EnumType.STRING)放在地图的上方,它只会影响值,即RequestImportance

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73047634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档