1
resposta

problema ao cadastrar ManyToMany

Estou tendo problemas ao cadastrar uma entidade que possui um relacionamento ManyToMany, Ele não esta cadastrando os dados na tabela associativa.

A Noticia e cadastrada normalmente, mas nada e cadastrado na associativa noticias_tag

Vou colocar aqui os códigos:

  • Mapeamento

Noticia:

@Entity
@Table(name = "not_noticias")
public class Noticia {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "not_id")
    private Long id;

    @Column(name = "not_titulo")
    private String titulo;

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
    @JoinTable(name = "noticias_tag", joinColumns = @JoinColumn(name = "not_id"), inverseJoinColumns = @JoinColumn(name = "tag_id"))
    private List<Tag> tags;
}

Tag:

@Entity
@Table(name = "tag_tag")
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "tag_id")
    private Long id;

    @Column(name = "tag_nome")
    private String nome;

 @ManyToMany(mappedBy="tags", fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
    private List<Noticia> noticias;
}
  • Metodo

Cadastro:

@RequestMapping(value = "/cadastro", method = RequestMethod.GET)
    private String adicionar(Model model) {

        model.addAttribute("jogos", repositorioJogo.findAll());
        model.addAttribute("noticia", new Noticia());
        model.addAttribute("tags", repositorioTag.findAll());

        return "administracao.noticia.cadastro.tiles";
    }

    @RequestMapping(value = "/cadastro", method = RequestMethod.POST)
    private String adicionar(@ModelAttribute("noticia") @Valid Noticia novaNoticia, BindingResult result, Model model){
        if (result.hasErrors()) {
            return "noticia.cadastro.tiles";
        }
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String nomeUsuario = auth.getName();
        Usuario usuario = repositorioUsuario.findByUsername(nomeUsuario);

        Date data = new Date();

        novaNoticia.setData(data);
        novaNoticia.setUsuario(usuario);

        repositorioNoticia.save(novaNoticia);
        return "redirect:/noticias/";
    }
  • View:

Cadastro:

<c:url var="actionAdicionar" value="/administracao/noticias/cadastro"></c:url>

<form:form action="${actionAdicionar}" method="post" modelAttribute="noticia" cssClass="form-labe">

    <div class="form-group input-icon-left">
        <i class="glyphicon glyphicon-pencil"></i>
        <form:input id="titulo" path="titulo" cssClass="form-control" placeholder="Titulo da Noticia"/>
    </div>

<c:forEach items="${tags}" var="tag">
        <input type="checkbox" class="checkbox checkbox-inline" value="${tag.id}">${tag.nome}<br>
    </c:forEach>

<div class="text-center"> <input type="submit" value="Cadastrar!" class="btn btn-lg btn-block btn-rounded btn-shadow btn-primary" /> </div>
                </br>
</form:form>
1 resposta

Fala aí Rafael, blz?

Cara faz um teste, altera de CascadeType.MERGE para CascadeType.PERSIST.

Veja se isso resolve.