0

次の POJO があります。

class Month {
    long id;
    String description;
    List<Day> days; // always contains 29, 30 or 31 elements
}

class Day {
    byte nr; // possible values are 1-31
    String info;
}

JPA + Hibernateを使用して、これらのオブジェクトを次のDB構造に保存する方法はありますか:

テーブルの月:

ID;説明;

テーブル日:

月のID;日付の番号;情報;

この状況のより良い解決策はありますか?

4

3 に答える 3

1

ポジョやテーブルの構造を変更できない場合は、少し困惑しています。可能であれば、単純な注釈付きpojoが機能します。

class Month {
   @Id
   private long id;
   private String description;
   @OneToMany(mappedBy="month",fetchType=Lazy)
   private List<Day> days;

}

----Daysテーブルの代理キーに必要なDBの変更

class Day {
    @Id
    private int id;
    private Month month;
    private byte nr; // possible values are 1-31
    private String info;
}
于 2009-02-02T20:03:26.907 に答える
0

これが私が見つけた1つの解決策です:

class Month {
    long id;
    String description;

    @CollectionOfElements(fetch = FetchType.EAGER)
    @IndexColumn(name = "nr-of-day")
    List<Day> days; // always contains 29, 30 or 31 elements
}

@Embeddable
class Day {
    byte nr; // possible values are 1-31
    String info;
}

@CollectionOfelementsと@IndexColumnはHibernateアノテーションです。JPAで使用可能な@OneToManyアノテーションを使用すると、hibernateは2つではなく3つのテーブルを作成します。

私の唯一の問題は、Day.nrが2回保存されることです。1回目はリストのIndexColumn(0ベースのカウンター)として、2回目はクラスDayのフィールド(1ベースのカウンター)として保存されます。

于 2008-12-04T09:28:18.673 に答える
0

代わりに CascadeType.PERSIST を使用して @Embeddable のない Day @Entity クラスと Month @Entity クラスの UNIDIRECTIONAL 関係をマップできますか?

@Entity 公開クラス 月 {

@Id
@GeneratedValue
private Integer id;


// one way relationship
@OneToMany(cascade=CascadeType.PERSIST)
@JoinColumn(name="MONTH_ID")
@IndexColumn(name="childIndex")
private List<Day> dayList = new ArrayList<Day>();

}

@Entity公開クラスの日{

@EmbeddedId // composed by month foreign key and index column
private DayId id;

}

この問題を解決してくれることを願っています

よろしく Arthur Ronald FD Garcia (Java プログラマー) Natal/Rn - ブラジル

于 2009-06-22T06:44:11.857 に答える