【问题标题】:insert List<Enum> into mysql database using java使用 java 将 List<Enum> 插入 mysql 数据库
【发布时间】:2012-12-05 13:22:02
【问题描述】:

在我的代码中..

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

【问题讨论】:

  • 显示你的表结构?
  • 如果你想有一个列表,你需要有一个非一对一的关系。

标签: java spring hibernate


【解决方案1】:

你需要用@Enumerated注解Enum列表。

@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

【讨论】:

  • 谢谢你.. 我喜欢你的网站@Viral Patel
  • 您在 DB 中的工作日列是否为 NUMBER 类型?如果是这样,那么您需要使用@Enumerated(EnumType.ORDINAL)
猜你喜欢
  • 2018-04-20
  • 1970-01-01
  • 2019-11-17
  • 2018-05-04
  • 1970-01-01
  • 2014-04-17
  • 2015-08-23
  • 1970-01-01
  • 2018-05-09
相关资源
最近更新 更多