Гибернация много ко многим - метод извлечения жаждет ленивых
Новое в 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 в другом месте ...
Пожалуйста, помогите, какой метод выборки я должен использовать и почему?
Спасибо!