0

在我的代码中..

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

我将插入weekday 数据库...听到WeekdayType的是枚举

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)]
4

1 回答 1

2

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

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

您可以使用 @Enumerated 批注的 EnumType 枚举属性指定枚举应如何保存在数据库中。EnumType.ORDINAL 指定枚举将作为整数值保存。在这里,设置为 VALUE1 的 myEnum 将保持为 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

于 2012-12-18T10:53:23.443 回答