2つのエンティティUser
とSport
があるとします。私はJPAに、ユーザーに関する情報とお気に入りのスポーツのリストを保存したいと考えています。スポーツテーブルに重複を含めることはできません。 (お気に入りのスポーツが提供されている)データベースにユーザーを追加するたびに、彼のデータは保存され、指定されたスポーツがスポーツテーブルに存在する場合は、既存の行(別のテーブルにある可能性があります)創造された。ノー成功を収めて、次みました:JPAは重複を保存せず、既に存在するフィールドを指します
スポーツエンティティ
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long sportId;
//@Column(unique = true)
private String sportName;
@ManyToMany(mappedBy = "sports")
private Set<User> users;
ユーザエンティティ私は、複数のユーザーが、このように作成したセーブ
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long userId;
private String username;
@ManyToMany(cascade = CascadeType.ALL)
Set<Sport> sports;
:
User user1 = new UserBuilder("user1").sports(new Sport("basketball"), new Sport("football")).build();
User user2 = new UserBuilder("user2").sports(new Sport("tennis")).build();
User user3 = new UserBuilder("user3").sports(new Sport("football")).build();
Iウィスポーツテーブルには複数の「バスケットボール」フィールドと「フットボール」フィールドがあります。それを防ぐ方法は?事前
既存のオブジェクトを再利用するのではなく、新しい "スポーツ"オブジェクトを毎回作成しています。なぜ、「サッカー」などを作るのではないのですか?同じロジックがJavaオブジェクトに一般的に当てはまります。 JPA固有のものはありません。 – DN1
IDはエンティティを定義するものなので、バスケットボールが1つしかないようにするには、sportNameをIDにして一意であることを確認します。あなたのIDが空白の場合、JPAはそれが新しいとみなして、シーケンスが値を割り当てることができるようにオブジェクトを挿入しなければなりません。しかし、JPAから既存のエンティティを検索し、新しいインスタンスを作成するのではなく、それらの参照を使用する必要があります。 – Chris