Hibernate @ManyToMany supprimer la relation

J'ai 2 entités: l'Utilisateur et le UsersList.

@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 un 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());

deleteWithHibernate(Long id) {
        User usr = hibernateTemplate.get(User.class, id);
        hibernateTemplate.delete(usr);
}

À l'étape 1, j'ai 3 lignes dans les UTILISATEURS (USER_ID) de la table.

Après l'étape 2 (deuxième commentaire) j'ai 1 ligne dans la USERS_LIST (USERS_LIST_ID) table et dans la table de jointure USERS_LIST_USERS (USER_ID, USERS_LIST_ID) 3 lignes.

Ce que je veux réaliser dans l'étape 3 est le suivant: quand je supprime un utilisateur à partir de la table des UTILISATEURS, disons - utilisateur avec USER_ID = 4, je veux juste la ligne avec USER_ID = 4 à partir de la table de jointure pour être supprimés, et les autres à rester.

Est-il une annotation de solution à mon problème?

Quelle est la méthode deleteWithHibernate ressembler?

OriginalL'auteur Flueras Bogdan | 2009-08-19