0

私のコードでは..

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

私はweekday データベースに挿入しています... Hear WeekdayTypeis 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)]
4

1 に答える 1

2

列挙型リストに注釈を付ける必要があります@Enumerated

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

@EnumeratedアノテーションのEnumTypeenumプロパティを使用して、データベースで列挙型を永続化する方法を指定できます。EnumType.ORDINALは、列挙型が整数値として永続化されることを指定します。ここで、VALUE1に設定されたmyEnumは0として永続化され、VALUE2は1として永続化されます。

別の方法は、EnumType.STRINGを使用して、フィールドが設定されているenum値の名前を使用してenumが永続化されることを指定することです。したがって、前の例に適用すると、フィールドmyEnumをMyEnum.VALUE1に設定すると、VALUE1などとして保持されます。

更新:columnDefinitionまた、enumのすべての有効な値でプロパティ を指定する必要があります。

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

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

于 2012-12-18T10:53:23.443 に答える