如何使用java在mysql的Enum type列中插入两个以上的值?

时间:2012-12-19 11:23:56

标签: java spring hibernate jpa

在我的Java Program 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定义为{my TimetableVO.java

    @Column(name="REPEAT_DAYS")
@Enumerated(EnumType.STRING)
private WeekdayType repeatDays;// And Setter and Getters....

在我的服务课中,我这样做..

String totalDays="MONDAY,SUNDAY,FRIDAY,SATURDAY"
    public void createEvent(TimetableVO timetableVO) {
    WeekdayType weekday = null;
    for (String day : totalDays.split(",")) {
        weekday = WeekdayType.valueOf(day);
    }
    timetableVO.setRepeatDays(weekday);
......
......
......
entityManager.persist(timetableVO);     



    }

但问题是在数据库列中添加最后一个值...这意味着它覆盖以前的值

对于Ex:上面的字符串SATURDAY仅插入数据库,但我想插入所有值,如MONDAY,SUNDAY,FRIDAY,SATURDAY ...给我建议..

2 个答案:

答案 0 :(得分:2)

更改列类型

private WeekdayType repeatDays;

应更改为String type

private String repeatDays;

将您的csv设置为此列。

其他选择是

private List<WeekdayType> repeatDays; 使用@JoinTable注释

将创建另一个映射表。处理许多关系。

答案 1 :(得分:1)

尝试在单个列中保存更多值是关系数据库中的概念错误。 解决方案可能是创建另一个表,并在TimeTable和新创建的表之间创建关系。

第二种不太灵活的替代方案,可以创建7个不同的属性(以及7个不同的列),每个属性相对于一天,而无需创建新表,因此您可以:

 @Column(name="MONDAY")
 private boolean repeatOnMonday;

 @Column(name="TUESDAY")
 private boolean repeatOnTuesday;

 //...