1

私の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はこのように定義します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);     



    }

しかし、問題はデータベース列にあり、最後の値のみを追加しています...つまり、以前の値を上書きします

例:上記の文字列SATURDAYはデータベースにのみ挿入しますが、MONDAY,SUNDAY,FRIDAY,SATURDAY...のようなすべての値を挿入したい..

4

2 に答える 2

2

列タイプを変更する

private WeekdayType repeatDays;

文字列型に変更する必要があります

private String repeatDays;

csvをこの列に設定します。

他のオプションは持っていることです

private List<WeekdayType> repeatDays;@JoinTable注釈 付き

これにより、別のマッピングテーブルが作成されます。多対多の関係を処理します。

于 2012-12-19T11:27:13.617 に答える
1

1 つの列により多くの値を保存しようとすると、リレーショナル データベースでは概念的なエラーになります。解決策は、別のテーブルを作成し、あなたTimeTableと新しく作成されたテーブルの間に関係を作成することです。

柔軟性の低い 2 つ目の代替方法は、新しいテーブルを作成せずに、それぞれが 1 日を基準にして 7 つの異なるプロパティ (および 7 つの異なる列) を作成することです。

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

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

 //...
于 2012-12-19T11:50:24.947 に答える