Pessoal,
1. Tenho uma classe Usuario.
2. Tenho uma classe Grupo.
3. Um usuário pode estar em mais de um Grupo e vice-versa.
4. Ou seja, um relacionamento muitos-para-muitos. Surge, então, a classe GrupoUsuario.
Até aí, tudo bem.
Fiz o mapeamento no Hibernate com Annotations e utilizando o HibernateTools para realizar isso.
Veja o código que estou utilizando para testar a inclusão no Hibernate.
Usuario usuario = new Usuario();
usuario.setLogin("userTeste");
usuario.setNome("Usuário Teste");
Grupo grupo1 = new Grupo(1, "Administradores");
Grupo grupo2 = new Grupo(2, "Liberação");
Grupo grupo3 = new Grupo(3, "Preparação");
Session session = sessionFactory.openSession();
Transaction transaction = session.getTransaction();
transaction.begin();
GrupoUsuario grupoUsuario = new GrupoUsuario();
grupoUsuario.setId(new GrupoUsuarioId(grupo2.getId(), usuario.getId()));
grupoUsuario.setUsuario(usuario);
grupoUsuario.setGrupo(grupo2);
usuario.getGrupoUsuarios().add(grupoUsuario);
grupoUsuario = new GrupoUsuario();
grupoUsuario.setId(new GrupoUsuarioId(grupo1.getId(), usuario.getId()));
grupoUsuario.setUsuario(usuario);
grupoUsuario.setGrupo(grupo1);
usuario.getGrupoUsuarios().add(grupoUsuario);
session.save(usuario);
transaction.commit();
Eu achei que quando eu salvasse o Usuário, o Hibernate pegaria o ID que foi gerado, e incluiria automaticamente nos objetos GrupoUsuario que criei.
Porém, o seguinte erro é gerado:
Cannot insert the value NULL into column 'ID_USUARIO', table 'Reanalise.dbo.GRUPO_USUARIO'; column does not allow nulls. INSERT fails.
Se eu faço isso aqui:
...
session.save(usuario);
Iterator<GrupoUsuario> itGrupoUsuario = usuario.getGrupoUsuarios().iterator();
while (itGrupoUsuario.hasNext()) {
itGrupoUsuario.next().getId().setIdUsuario(usuario.getId());
}
transaction.commit();
[code]
Ou seja, se depois de salvar o usuário eu setar o ID gerado em todos os objetos GrupoUsuario. Aí funciona normalmente.
É isso mesmo que devo fazer?
Abraço e Obrigado
