Гибернация много ко многим - метод извлечения жаждет ленивых

Новое в Hibernate.

У меня есть группа пользователей многие ко многим. Три таблицы: таблица сопоставления пользователя, группы и группы пользователей.

Объекты:

@Entity
@Table(name = "user")
public class User {

@Id
@Column (name = "username")
private String userName;

@Column (name = "password", nullable = false)
private String password;


@ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinTable(name="usergroup", 
            joinColumns={@JoinColumn(name="username")}, 
            inverseJoinColumns={@JoinColumn(name="groupname")})
private Set<Group> userGroups = new HashSet<Group>();

... setter and getters



@Entity
@Table(name = "group")
public class Group {

@Id
@Column(name = "groupname")
private String groupName;

@Column(name = "admin", nullable = false)
private String admin;

@ManyToMany(mappedBy = "userGroups", fetch = FetchType.EAGER)
private Set<User> users = new HashSet<User>();

... setter and getters

Обратите внимание, что в группе Entity я использую метод извлечения EAGER. Теперь, когда я звоню в мой DAO, чтобы извлечь все группы в системе, используя следующие критерии:

  Criteria criteria = session.createCriteria(Group.class);
  return criteria.list();

Я получаю все строки из таблицы mappgin (usergroup) вместо фактического количества групп ...

например, если я в пользовательской таблице

 username password
 -----------------
 user1     user1
 user2     user2

в групповой таблице

 groupname admin
 ---------------
 grp1      user1
 grp2      user2

в таблице групп пользователей

 username groupname
 ------------------
 user1     grp1
 user2     grp2
 user1     grp2
 user2     grp1

Результатом будет следующий список - {grp1, grp2, grp2, grp1}

Вместо {grp1, grp2}

Если я изменю в Group Entity метод fetch на LAZY, я получаю правильные результаты, но hibernate выбрасывает меня LazyException в другом месте ...

Пожалуйста, помогите, какой метод выборки я должен использовать и почему?

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос