Relacionamento no Hibernate (Resolvido)

4 respostas
M

Bom dia,

Estou com a seguinte situação.
Tenho um relacionamento de muito para muito entre usuário e grupo de usuário.

Na classe de Grupo de Usuário tenho uma Collection de Usuário.
O mapeamento desse relacionamento no grupo de usuário está assim:

<set name="users" table="USERGROUP_USER"> <key column="USERGROUP_ID" /> <many-to-many column="USER_ID" class="business.user.User" /> </set>

Existe a possibilidade de inativar um usuário, no banco de dados é controlado pelo campo USER_ACTIVE na tabela de usuário (USER).

Eu quero que ao chamar o método getUsers() de Grupo de usuários seja retornado apenas os usuário ativo, ou seja, como o valor do campo USER_ACTIVE = 1 na tabela USER.

Alguem sabe o que tem que ser alterado para ter esse resultado esperado?

Obrigado desde já,

Rodrigo

4 Respostas

P

seria interessante se vc nos mandasse seu codigo do metodo getUsers, mas de qq forma vc tera q criar um criteria novo nesse metodo com a condição where USER_ACTIVE = 1,

ou simplesmente construir uma query com o hql q contenha essa condição…

mas construa isso de forma elegante…usando criteria eh mais indicado…e separando em um metodo getActiveUsers ou passando esse parametro do where para o metodo…

M

O metodo getUsers() é apenas um metodo getter para propriedade users do tipo Collection

public Collection getUsers(){ return this.users; }

P

cara, seria interessante vc passar mais informações do seu codigo para não ficarmos no chute…

mas de qq forma, no mapeamento hbm.xml da sua classe User…vc pode fazer o seguinte:

<class name="business.user.User" table="USER" where="USER_ACTIVE = 1" >

mas dessa forma, vc nunca vai conseguir resgatar seus usuários inativos…

M

Consegui resolver.

Alterei o método que carrega o Grupo de Usuário.
Retirei o session.load(UserGroup.class, id) por um HQL:

//Object obj = session.load(UserGroup.class, userGroup.getId());

session.createQuery("from UserGroup ug " +
                    "left join fetch ug.users u " +
                    "where ug.id = :userGroupId and u.active = 1");

query.setLong("userGroupId",userGroup.getId().longValue());

Object obj = query.uniqueResult();

Obrigado.

Criado 22 de novembro de 2006
Ultima resposta 23 de nov. de 2006
Respostas 4
Participantes 2