Hibernate:如何将 java.util.Map 与 java.util.Set 映射为带有 LocalDate 的值?

Posted

技术标签:

【中文标题】Hibernate:如何将 java.util.Map 与 java.util.Set 映射为带有 LocalDate 的值?【英文标题】:Hibernate: How to map java.util.Map with java.util.Set as a value with LocalDate inside? 【发布时间】:2021-06-14 14:47:20 【问题描述】:

使用注释正确映射此类对象时遇到问题:

@Entity
@Table(name = "root_entity")
public RootEntity 
    @Id
    @GeneratedValue
    @Column(name = "id")
    private Long id;

    // annotations here... DayType extends Enum
    private Map<DayType, Set<LocalDate>> days;

想要的结果:

root_entity:

column
id
day_types_id

day_types:

column
id
name

days_list:

column
id
localdate_in_typestamp

day_types_to_days_list:

column
day_type_id
day_list_id

【问题讨论】:

【参考方案1】:

您需要一个DayTypeEntity,它看起来类似于以下内容:

@Entity
@Table(name = "root_entity")
public RootEntity 
    @Id
    @GeneratedValue
    @Column(name = "id")
    private Long id;

    @OneToMany
    @JoinColumn(name = "day_type_id", referencedColumnName = "day_types_id")
    @MapKeyColumn(name = "day_type_id")
    @MapKeyEnumerated(ORDINAL)
    private Map<DayType, DayTypeEntity> dayTypes;

@Entity
@Table(name = "day_types")
public DayTypeEntity 
    @Id
    @Column(name = "day_type_id")
    @Enumerated(ORDINAL)
    private DayType id;

    private String name;

    @ElementCollection;
    private Set<LocalDate> days;

【讨论】:

是的,有同样的想法,但认为这对这个案例来说还不够出色......

以上是关于Hibernate:如何将 java.util.Map 与 java.util.Set 映射为带有 LocalDate 的值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jackson 将 JSON 字符串转换为漂亮的打印 JSON 输出

GWT - Hibernate:如何将 MySQL 的结果显示到 GWT 客户端

如何将 LocalDate 作为 Date 类型持久保存到 Hibernate

如何使用spring + hibernate将数据插入数据库?

如何将 Hibernate Session 绑定到 Grails 中的线程?

如何将 LocalDateTime 提供给 jpa/hibernate 查询?