私は何のアドバイスもしていないかもしれませんし、そうでないかもしれません。のは、このようなMany2Many関係に関心のセットを持っているプロファイルオブジェクトを持ってみましょう:JPA/Hibernate Eagerにおける多対多リレーションシップ
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="profile_interests",
joinColumns={ @JoinColumn(name="profile_id") },
inverseJoinColumns = { @JoinColumn(name="interest_id") })
@OrderColumn(name="display_order")
private Set<Interest> interests;
//GETTER AND SETTERS
public Set<Interest> getInterests() {
return interests;
}
public void setInterests(Set<Interest> interests) {
this.interests = interests;
}
public void addInterest(Interest interest) {
interests.add(interest);
}
public void removeInterest(String interestName) {
interests.remove(new Interest(interestName));
}
を自分のアプリケーションのコントローラでは、私はこの方法で利益を追加および削除することができます。
@RequestMapping(value="/save-interest", method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<?> saveInterest(@RequestParam("name") String interestName) {
SiteUser user = getUser();
Profile profile = profileService.getUserProfile(user);
String cleanedInterestName = htmlPolicy.sanitize(interestName);
Interest interest = interestService.createIfNotExists(cleanedInterestName);
profile.addInterest(interest);
profileService.save(profile);
return new ResponseEntity<>(null, HttpStatus.OK);
}
@RequestMapping(value="/delete-interest", method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<?> deleteInterest(@RequestParam("name") String interestName) {
SiteUser user = getUser();
Profile profile = profileService.getUserProfile(user);
profile.removeInterest(interestName);
profileService.save(profile);
return new ResponseEntity<>(null, HttpStatus.OK);
}
最終的に、プロファイル、profile_interests、およびinterestテーブルが作成されます。 profile_interestテーブルにはprofile_idとinterest_idがあります。
ここで、私はまた、活動、情熱または憎しみ、嫌いなこと、仕事、召喚という言い方をしたいと考えています。私は6つの新しい(活動、情熱、憎しみ、嫌い、仕事、職業)をカバーするために、これらの同じプロセスを何度も繰り返すことができます。
ある時点で、他の人が車に情熱を持っているかどうか、車に興味を持っている人がいるかもしれません。第3は車を嫌い、第4は車が彼の職業です。
私は7つの異なるオブジェクトセット(関心事、活動、情熱、嫌悪、嫌い、仕事、仕事)を作成すると、すべての表でそれらの多くを繰り返します。
- 7組のオブジェクトの共通の(興味、活動、情熱、嫌い、嫌いな、仕事、職業)表を持っていますが、7つの異なる中間表(profile_interests、profile_activities、profile_passions、profile_hates 、profile_dislikes、profile_task、profile_vocation)を使用していますか?
ありがとうございました。私はプログラマー以外のあなたの助けに感謝します。それは問題がよく文書化され、すでに解決されているかもしれない、私は知らない。
PD:インタレスト・エンティティはここにある:JPAエンティティ2で
@Entity
@Table(name = "interests")
public class Interest implements Comparable<Interest> {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "interest_name", unique = true, length = 25)
private String name;
public Interest() {
}
'EAGER'として' fetchType'を設定するのは 'Many2Many'関係にはあまり適していません、特にあなたはそれを複数持っています。 –
ありがとうハディ、私はそれを複数回使用するとあなたのアドバイスを思い出しますが、それは私が避けようとしている(何度も使用している)ものです。どのようにそれを行う上での任意の提案? – Mike
これは可能ですが、それほど簡単ではありません。profile_interests、profile_activities、profile_passions、profile_hates、profile_dislikes、profile_task、profile_vocationの7つのオブジェクトをマップする必要があります。 – Boschi