使用java </enum>将List <enum>插入到mysql数据库中

时间:2012-12-18 10:45:05

标签: java spring hibernate

在我的代码中..

List<WeekdayType> weekday = new ArrayList<WeekdayType>();

我将weekday插入数据库... 听到WeekdayType是Enum

public enum WeekdayType {
MONDAY(Calendar.MONDAY), TUESDAY(Calendar.TUESDAY), WEDNESDAY(
        Calendar.WEDNESDAY), THURSDAY(Calendar.THURSDAY), FRIDAY(
        Calendar.FRIDAY), SATURDAY(Calendar.SATURDAY), SUNDAY(
        Calendar.SUNDAY);
private int day;
private WeekdayType(int day) {
    this.day = day;
}
public int getDay() {
    return day;
}}

我正在这样在Hibernate中创建Bean ..

    @Entity
@Table(name="EC_TIMETABLE")
public class TimetableVO
{
-------
-----
@Column(name="REPEAT_DAYS")
    private List<WeekdayType> repeatDays;
//Setter and Getter...
}

我将值插入到数据库中,但它给出错误:

org.hibernate.MappingException: Could not determine type for: java.util.List, at table: EC_TIMETABLE, for columns: [org.hibernate.mapping.Column(REPEAT_DAYS)]

1 个答案:

答案 0 :(得分:2)

您需要使用@Enumerated注释注释枚举列表。

@Column(name="REPEAT_DAYS")
@Enumerated(EnumType.STRING)
private List<WeekdayType> repeatDays;

您可以使用@Enumerated注释的EnumType枚举属性指定枚举应如何在数据库中保留。 EnumType.ORDINAL指定枚举将作为整数值持久化。在这里,myEnum设置为VALUE1将保持为0,VALUE2保持为1,等等。

另一种方法是使用EnumType.STRING指定枚举将使用字段设置为的枚举值的名称进行持久化。因此,应用于上一个示例,将myEnum字段设置为MyEnum.VALUE1将保持为VALUE1等。

<强>更新 您还需要使用枚举的所有有效值指定columnDefinition属性。

@Column(name="REPEAT_DAYS", columnDefinition="enum(1,2,3)")

参考:mapping-enum-types-with-hibernate-annotations