J'ai 2 entités: User et UsersList.Hibernate @ManyToMany supprimer la relation
@Entity
@Table(name = "USERS")
public class User {
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;
@ManyToMany(cascade = CascadeType.REMOVE, mappedBy = "users")
private List<UsersList> usersLists = new ArrayList<UsersList>();
public List<UsersList> getUsersLists() {
return usersLists;
}
public void setUsersLists(List<UsersList> usersLists) {
this.usersLists = usersLists;
}
}
et
@Entity
@Table(name = "USERS_LIST")
public class UsersList {
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;
@ManyToMany
private List<User> users = new ArrayList<User>();
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
et le code comme celui-ci:
// 1
List<User> dbUsers; // 3 the user instances are persisted in DB
UsersList usersList = new UsersList();
usersList.setUsers(dbUsers);
// 2 - now persist the usersList using hibernate...
saveWithHibernate(usersList);
//3 - delete using a persisted user
deleteWithHibernate(dbUsers.get(0).getId());
où
deleteWithHibernate(Long id) {
User usr = hibernateTemplate.get(User.class, id);
hibernateTemplate.delete(usr);
}
Dans l'étape 1 I ai 3 lignes dans la table utilisateurs (USER_ID) .
Après l'étape 2 (deuxième commentaire), j'ai 1 ligne dans la table USERS_LIST (USERS_LIST_ID) et dans la table de jointure USERS_LIST_USERS (USER_ID, USERS_LIST_ID) 3 lignes. Ce que je veux atteindre à l'étape 3 est la suivante: quand je supprime un utilisateur de la table USERS - disons user avec USER_ID = 4, je veux juste la ligne avec USER_ID = 4 de la table de jointure à supprimer et les autres à rester.
Existe-t-il une solution d'annotation à mon problème?
À quoi ressemble la méthode deleteWithHibernate? –