Spring + JPA отношения "многие ко многим"

Я новичок в Spring и пытаюсь заставить отношения "многие-ко-многим" работать так, как я ожидаю. Отношения работают нормально, таблицы создаются и данные вставляются правильно. Я ожидаю, что когда я опустошаю список (т.е. я опустошаю ArrayList "users" из объекта типа "Group"), я ожидаю, что система удалит отношения из базы данных - но этого не происходит.

У меня есть следующие классы:

@Entity
@Table(name = "`group`")
public class Group
{
    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(
            name = "`user_has_group`",
            joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")
    )
    private List<User> users = new ArrayList<User>();

    ...
}

@Entity
@Table(name = "`user`")
public class User
{
    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;

    @ManyToMany(mappedBy = "users")
    private List<Group> groups = new ArrayList<Group>();

    ...
}

Вот DAO:

@Repository
public class GroupJpaDao implements GroupDao
{
    private EntityManager em;

    @Transactional
    public void save(Group group)
    {
        this.em.merge(group);
    }

    ...

    @PersistenceContext
    void setEntityManager(EntityManager entityManager)
    {
        this.em = entityManager;
    }
}

@Repository
public class UserJpaDao implements UserDao
{
    private EntityManager em;

    @Transactional
    public void save(User user)
    {
        this.em.merge(user);
    }

    ...

    @PersistenceContext
    void setEntityManager(EntityManager entityManager)
    {
        this.em = entityManager;
    }
}

Вот тестовый метод:

@Test
public void test()
{
    Group g = new Group();
    g.setName("Test group");
    groupDao.save(g); // Works fine - inserts the group into the database

    User u = new User();
    u.setName("Test user");
    userDao.save(u); // Works fine - inserts the user into the database

    g.addUser(u);
    groupDao.save(g); // Works fine - adds the many-to-many relationship into the database

    g.removeAllUsers();
    groupDao.save(g); // Doesn't work - I'm expecting it to remove all the related relationships from the database but it doesn't!
}

Я делаю что-то не так или это что-то невозможно сделать?

Любая подсказка будет очень признательна.

Спасибо!

7
задан satoshi 12 January 2012 в 17:39
поделиться