Recipe テーブルと Account テーブルの 2 つのテーブルがあります。Recipe テーブルには、多数のレシピが格納されます。アカウント テーブルには、多数のユーザー アカウントが格納されます。ユーザーは 0 個以上のレシピに関連付けることができます。ユーザーがレシピを気に入ると、このユーザーはレシピに関連付けられます。この関連付けを記録するために、LikedRecipe テーブルというテーブルを作成しました。
これらは、各テーブルの列です。
- レシピ: ID、名前。Id は主キーです。
- アカウント: メール、パスワード。メールが主キーです。
LikedRecipe: ID、名前、メール。id は主キーです。
@Entity @Table(name = "Recipe") public class Recipe { private Set<Account> account; private Long id; @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "LikedRecipe", joinColumns = @JoinColumn(name = "recipeId"), inverseJoinColumns = @JoinColumn(name = "email")) public Set<Account> getAccount() { return account; } public void setAccount(Set<Account> account) { this.account = account; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id") public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity @Table(name = "Account") public class Account implements Serializable { private Set<Recipe> likedRecipes = new HashSet<Recipe>(); private String email; @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }) @JoinTable(name = "LikedRecipe", joinColumns = @JoinColumn(name = "email"), inverseJoinColumns = @JoinColumn(name = "recipeId")) public Set<Recipe> getLikedRecipes() { return likedRecipes; } public void setLikedRecipes(Set<Recipe> likedRecipes) { this.likedRecipes = likedRecipes; } @Column(name = "email") @Id public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
アカウントとレシピの関連付けを削除するメソッドを作成しました。
public void unlikeARecipe(String email, Long recipeId){
Query query = entityManager
.createQuery("delete from LikedRecipe where recipeId = :recipeId and email = :email");
query.setParameter("recipeId", recipeId);
query.setParameter("email", email);
query.executeUpdate();
}
メソッドの最後に次のコード行を追加するまで、このメソッドは LikedRecipe テーブルからレコードを削除しませんでした。
entityManager.clear();
JPA API ドキュメントによると、clear メソッドは永続コンテキストをクリアし、すべての管理対象エンティティを切り離します。
私の質問は、detach とはどういう意味ですか? また、上記の方法で作成したオブジェクトをデタッチすると、LikedRecipe テーブルからどのようにレコードが削除されるのでしょうか。clear メソッドを正しい方法で使用していますか?
ありがとうございました。