我需要将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?
答案 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之间的一致性。