Pessoal,
Tenho o seguinte problema: tenho uma lista de menus que estão associadas a um tipo de usuario. Para evitar o problema de M:N, criei uma tabela associativa, mas estou com duvidas na criação das anotações e como persistir esses dados.
Preciso que seja escolhido um tipo de usuário e para cada tipo, selecione os menus que esse tipo de usuario terá acesso, depois disso devo persistir, na tabela associativa, o id do tipo e o id dos menus. Tenho o tipo de usuário e a lista de menus que ele terá acesso, porém não sei como persistir na tabela associativa, da maneira que fiz, só salva o último menu da lista e não todos.
TipoUsuario:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "tipoUsuario")
private List<Permissao> permissoes;
Menu:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "menu")
private List<Permissao> permissoes;
Permissao
@ManyToOne
@JoinColumn(name = "id_tipo_usuario", referencedColumnName = "id")
private TipoUsuario tipoUsuario;
@ManyToOne
@JoinColumn(name = "id_menu", referencedColumnName = "id")
private Menu menu;
XHTML:
<p:selectOneMenu id="listaTipoUsuario"
value="#{permissaoController.permissao.tipoUsuario}"
converter="tipoUsuarioConverter"
required="true"
requiredMessage="Por favor, selecione o tipo de usuário.">
<f:selectItem itemLabel="Selecione..."/>
<f:selectItems value="#{tipoUsuarioController.listaDeTiposDeUsuarioParaCombobox}"/>
<!--<p:ajax update="permissoesPorTipo"
listener="#{permissaoController.carregaPermissoesPorTipoDeUsuario}"/>-->
</p:selectOneMenu>
<h:outputLabel for="permissoesTipoUsuario" value="Permissões:"
styleClass="labelNegrito"/>
<p:selectManyCheckbox id="menus" layout="pageDirection"
value="#{permissaoController.menusSelecionados}"
converter="menuConverter"
required="true"
requiredMessage="Por favor, selecione pelo menos um menu.">
<f:selectItems value="#{menuController.listaDeSelectItensDeMenu}"/>
</p:selectManyCheckbox>
<p:column/>
<p:commandButton image="ui-icon-disk" value="Salvar"
actionListener="#{permissaoController.salvar}"/>
<p:commandButton image="ui-icon-arrowthickstop-1-w" value="Voltar"
onclick="javascript:history.back(1)"
immediate="true"/>
MB:
//Salva ou edita a categoria no BD
public void salvar() throws IOException {
for (int i = 0; i < this.menusSelecionados.size(); i++) {
this.permissao.setMenu(menusSelecionados.get(i));
this.permissaoDao.save(this.permissao);
}
Como posso salvar a lista de menus de cada tipo de usuario, na tabela permissao? As anotações estão corretas? A lista fica nas classes Menu e Tipo de usuario mesmo ou no classe permissao? O for coloquei mais para teste e para ilustrar o que quero. Preciso que quando o usuario escolher o tipo de usuario adminsitrador, e clicar nos menus 1, 2 e 3. Seja salvo no Bd (tabela permissao) o id do tipo de usuario(no caso 1) e os menus selecionados, ficando assim:
id_tipo id _menu
1 1
1 2
1 3