OK、どうぞ
Spring Boot、ORMとしてのHibernate、そしておそらく何らかの種類のリレーショナルデータベース(MySQL)を使用してアプリケーションを構築していると想定しています。
データベース設計について:
はい、ここでのPatreonオブジェクトは、ItemエンティティとOneToManyの関係を持つ所有エンティティです(1つのPatreonにはN個のオブジェクトがある可能性があるため)。Patreonエンティティは、次の再定義で実行できます。
1)特にテーブルキー(long id-> Long id)には非プリミティブタイプを使用してみてください。
2)checkedOutItemsの配列とitemHistoryリストを失います。まず、関係は配列ではなくコレクションを使用してモデル化する必要があります。次に、これら2つは必要ありません。checkedOutItemsもitemHistoryもこの方法で保存することはありません。代わりに、List<Item> items
を作成してください これは、関係を説明しながらPatreonアイテムを格納します(ここにいくつかの例があります: http:/ /www.baeldung.com/hibernate-one-to-many
)
3)ここでも、Itemエンティティを使用して、履歴の配列を失う必要があります。必要なのは、所有するエンティティ(この場合はPatreon)への参照だけです。これにより、関係のManyToOne側が完成します。
4)日付フィールドには@Temporal
の注釈を付ける必要があることに注意してください また、正しいタイプを提供します(詳細については読むことができます)。
5)アイテムクラスは一般的に再設計する必要があります。
5)上記のすべてが完了し、Springを使用していると仮定すると、Patreonオブジェクトをクエリして、関連するエンティティ(アイテム)とともにオブジェクトを取得できるリポジトリを作成できます。
あなたの質問について:
Q1:はい、わかりました。詳細については、上記をご覧ください。
Q1.2:アレイはありません。リストまたはそれ以上のセットがより適しています。
Q1.3:あります。 1つ目はリレーショナルデータベースで使用されるJPAアノテーションで、2つ目はこのタイプ(リレーショナル)ではない、または標準の永続化APIが定義されていない(JPAなど)データベースおよびフレームワークで使用されるSpringData固有のアノテーションです。 NonNullとNotNullは、最初のものが実際に後者をスーパーセットするのとほぼ同じです(よく行われることです)。私が見る唯一の違いはターゲットです。詳細については、こちらをご覧ください: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/NonNull.html https://docs.oracle.com/javaee / 7 / api / javax /validation/constraints/NotNull.html
Q2:あります。上記を参照してください。
Q3:少し賢いデザインで、これ以上の必要性はわかりませんが、それが役立つと感じたら、どうでしょうか。設計をやり過ぎないでください。複雑です