Tenho as tabelas no meu bd:
grupo_usuario
codigo
descricao
permissao
codigo
descricao
permissao_grupo_usuario
cod_grupo_usuario
cod_permissao
GrupoUsuario
@ManyToMany
@JoinTable(name = "permissao_grupo_usuario",
joinColumns = { @JoinColumn(name = "cod_grupo_usuario")},
inverseJoinColumns={@JoinColumn(name="cod_permissao")}
)
private List<Permissao> permissoes;
.........
Permissao
@ManyToMany
@JoinTable(name = "permissao_grupo_usuario",
joinColumns = { @JoinColumn(name = "cod_permissao")},
inverseJoinColumns={@JoinColumn(name="cod_grupo_usuario")}
)
private List<GrupoUsuario> gruposUsuario;
...........
Consigo listar todas as permissões de um determinado Grupo de Usuário fazendo o seguinte:
public List<Permissao> listarPorGrupoUsuario(GrupoUsuario grupoUsuario) {
Query c = session.createQuery("SELECT p FROM Permissao AS p " +
"INNER JOIN p.gruposUsuario g WHERE g.codigo = " +
grupoUsuario.getCodigo());
List<Permissao> beans = c.list();
return beans;
}
Agora queria saber o seguinte:
Na minha tela de cadastro de grupo de usuário, o cliente vai preencher o grupo de usuário e escolher as permissões que o grupo de usuário terá.
Como faço para salvar o grupo de usuário e salvar as permissões que ele escolheu na tabela “permissao_grupo_usuario”? Lembrando que não vai ser inserido nada na tabela de permissão, ela somente serve para pegar os módulos que o sistema tem. Por exemplo, meu cliente digitou o grupo de usuário e escolheu as permissões abaixo, então terá que salvar assim no banco:
Tabela grupo_usuario "codigo, descricao"
1 - Gerente
Tabela permissao_grupo_usuario "cod_grupo_usuario, cod_permissao"
1 - 1
1 - 2
1 - 3
1 - 5
Tentei fazer da seguinte maneira
GrupoUsuario g = new GrupoUsuario();
g.setDescricao("Secretária");
List<Permissao> pList = new ArrayList<Permissao>();
Permissao p = new Permissao();
p.setDescricao("Cadastro de Clientes");
pList.add(p);
Permissao p2 = new Permissao();
p2.setDescricao("Relatório de Clientes");
pList.add(p2);
g.setPermissoes(pList);
GrupoUsuarioController.salvar(g);
E me da o seguinte erro:
Hibernate:
insert
into
grupo_usuario
(descricao)
values
(?)
Hibernate:
insert
into
permissao_grupo_usuario
(cod_grupo_usuario, cod_permissao)
values
(?, ?)
27/11/2009 21:23:35 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
SEVERE: Could not synchronize database state with session
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.model.Permissao
Alguem ja passou por isso e conseguiu resolver?