如何在MySQL和Hibernate中存储Day

时间:2013-10-10 17:37:00

标签: java hibernate

我需要将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;
        ...
}

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

3 个答案:

答案 0 :(得分:3)

请注意EnumType.ORDINAL javadoc

  

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

这意味着它使用ordinal()的{​​{1}}值存储在数据库中。这通常与列表中enum的位置有关。 enum是第一个,因此MONDAY为0。

我不知道让Hibernate将自定义ordinal()的自定义字段映射到表格的直接方法。 然而,没有必要这样做。 Hibernate将能够使用enum的{​​{1}}或ordinal()值进行来回映射。它们毕竟是常量。

答案 1 :(得分:2)

Becasue,EnumType.ORDINAL从0开始。您还可以定义为EnumType.String

答案 2 :(得分:1)

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