前回作成したクラス図に従ってエンティティに関連を追加していく。
以下ソースコード抜粋。
@Entity
@Table(name = "app_user")
public class User implements Serializable {
/** ユーザーの小説の付随情報 */
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<UserNovelInfo> userNovelInfos;
@Entity
@Table(name = "user_novel_info")
public class UserNovelInfo extends BaseObject implements Serializable {
/** ユーザー */
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username")
private User user;
/** 小説 */
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "novel_id")
private Novel novel;
}
@Entity
@Table(name = "novel")
public class Novel extends BaseObject implements Serializable {
/** ユーザーの小説の付随情報 */
@OneToMany(fetch = FetchType.LAZY, mappedBy = "novel", cascade = CascadeType.ALL)
private Set<UserNovelInfo> userNovelInfo = new HashSet<>();
@OneToManyで1:Nの関係を表している。@ManyToOneはその逆にN:1の関係を表している。@JoinColumnで外部キーのカラムを指定する。なお、このnameは外部キーのカラムの名が参照のリレーションシップのプロパティの名または参照元のエンティティまたは埋め込み可能クラスのフィールド + “_” + 参照される主キーのカラムの名となっている場合は省略可能となるが、逆にわかり難いので省略しないようにしている。