私は、コースごとに複数のオブジェクトで構成されたコースのレビューテーブルを用意しています。学生は毎月登録しているコースを確認する必要があります。数学、科学、外部キーをレビューテーブルに格納して、コースの各レビューがそれぞれのテーブルに関連付けられるようにします。動的に構成するオブジェクトを構成する
注:生徒はたった2つのコース
@Entity
class Review{
//multiple time fields here here
@OneToOne(cascade=CascadeType.ALL,optional=true)
@JoinColumn(name="math_review_id")
Math m;
@OneToOne(cascade=CascadeType.ALL,optional=true)
@JoinColumn(name="science_review_id")
Science s;
@OneToOne(cascade=CascadeType.ALL,optional=true)
@JoinColumn(name="history_review_id")
History h;
}
スーパークラス
@MappedSuperclass
class Course {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
int id;
@ManyToOne(fetch = FetchType.LAZY,
cascade = { CascadeType.DETACH,
CascadeType.MERGE,
CascadeType.PERSIST,
CascadeType.REFRESH },
)
@JoinColumn(name = "student_id")
private Student student;
}
サブクラス歴史
@Entity
class History extends Course{
//fields specific to history course
}
サブクラス数学
に@Entity
class Math extends Course{
//fields specific to math course
}
を登録することができます
Studentクラスは
@Entity
class Student{
//fields name,id,...
@OneToMany(mappedBy = "student",
cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private List<Review> reviewsList;
}
私は、学生がに登録されているもののコースをチェックして、数学、科学、歴史accordingly.Iは私reviews.jspにレビューオブジェクトを渡すと、休止状態を使用して返さ@ModelAttributeを保存して初期化します。初期化されていないオブジェクトは保存されませんが、hibernateは初期化されていなくてもnullエントリを作成します(私はテーブルにマッピングされ、永続クラスの内部にあるためだと思います)。私は、学生が登録されたコースだけで、レビューオブジェクトを動的に構築する方法を手助けする必要があります。私の現在の設計にはフローがあり、より良い設計提案は高く評価されます(私はJavaと休止状態で最小限の経験があります)
だから、 '' Math' Science'と 'History'クラスが違い(各クラスには、約15のフィールドが含まれています)と、彼らは' Course'スーパーclass.Iが異なるにそれらを置く考えを継承するいくつかの一般的なフィールドがたくさんありますクラスでは、クラス内のフィールドに基づいてレビューフォームを簡単に生成することもできます。 – jenthu
私は、すべてのコースデザインのためにあなたのテーブルに向かってゆっくりと重いと思っています。設計時に考慮する必要があるリストポイントはかなり意味があります。しかし、 'Course'クラスの' type'フィールドは 'String' 'Math''''''''''''''''''''''''''''''などの項目は、コースごとに独自のフィールドがたくさんあるので、同じテーブルにある場合は、コースのヌルエントリがたくさんあることを意味します。フロントエンドのテキストボックスを無効にする必要があると思っています。これは、レビュー中のコースには適用されません。 – jenthu
あなたが言及したように、新しいコースを追加したい場合は、私の「各コースのテーブル」は将来もっと多くのコードを追加する必要がありません。また、すべてのコースのテーブルが私の問題を解決できないと思います。それらの新しいフィールドに対応するためにテーブルを修正しなければなりません。私は本当に多くの提案を感謝するでしょう。 – jenthu