0

我需要将 DayId 存储在我的数据库中。这是我到目前为止所拥有的(不确定这是否是存储日类型的好方法)

public enum DayType {

    MONDAY(1),TUESDAY(2),WEDNESDAY(3),THURSDAY(4),FRIDAY(5),SATURDAY(6),SUNDAY(7);

使用它的实体是AppointmentSlot.java

public class AppointmentSlot{

        ...

        @Column
        @Enumerated(EnumType.ORDINAL)
        private DayType dayId;
        ...
}

我在将它持久化之前设置了 dayID appointmentSlot.setDayId(DayType.MONDAY);。但是在我的数据库中,我注意到dayId列中的存储值为 0。为什么它不存储为 1 ?

4

3 回答 3

3

注意EnumType.ORDINALjavadoc

将枚举类型属性或字段保留为整数。

这意味着它使用 的ordinal()enum来存储在数据库中。这通常与enum列表中的位置有关。MONDAY是第一个,所以它ordinal()是 0。

我不知道让 Hibernate 将自定义的自定义字段映射enum到表格的直接方法。但是,这样做没有任何意义。ordinal()Hibernate 将能够使用或 的String值来回映射enum毕竟它们是常数。

于 2013-10-10T17:39:01.850 回答
2

因为,EnumType.ORDINAL从 0 开始。你也可以定义为EnumType.String

于 2013-10-10T17:39:30.290 回答
1

我希望有一个单独的表来保存 DayType 枚举值(沿着另一个映射到该表的新实体)。AppointmentSlot 实体将拥有一个指向 DayType 实体 ID 的外键。对 AppointmentSlot 实例的任何插入或更新都需要您事先获取 DayType 值(必需的 id),以确保您的代码和数据库之间的一致性。

于 2013-10-10T17:52:47.793 回答