Hibernar muitos para muitos - buscar método ansioso vs preguiçoso
Novo no Hibernate.
Tenho grupo de usuários muitos para muitos relação. Três tabelas: tabela de mapeamento de usuário, grupo e grupo de usuários.
Entidades:
@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
Observe que na Entidade de Grupo estou usando o método de busca EAGER. Agora, quando estou chamando meu DAO para recuperar todos os grupos no sistema usando os seguintes critérios:
Criteria criteria = session.createCriteria(Group.class);
return criteria.list();
Estou recebendo todas as linhas da tabela mappgin (usergroup) em vez de obter o número real de grupos ...
por exemplo, se eu tiver na tabela do usuário
username password
-----------------
user1 user1
user2 user2
na tabela de grupo
groupname admin
---------------
grp1 user1
grp2 user2
na tabela de grupo de usuários
username groupname
------------------
user1 grp1
user2 grp2
user1 grp2
user2 grp1
O resultado será a seguinte lista - {grp1, grp2, grp2, grp1}
Em vez de {grp1, grp2}
Se eu mudar na Entidade de Grupo, o método de busca para LAZY, estou obtendo os resultados corretos, mas o hibernate lança LazyException em outro local ...
Por favor, ajude o método de busca que devo usar e por quê?
Obrigado!