Jap 2 @ManyToMany não insere

Estou com uma dúvida fiz o relacionamento entre essas duas tabelas abaixo:

Usuario:

package br.com.controle.usuairo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;






import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.UniqueConstraint;

import org.hibernate.annotations.NaturalId;

import br.com.controle.demanda.Demanda;


@Entity
public class Usuario implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	private Integer id;
	private String nome;
	private String email;
	@NaturalId
	private String login;
	private String senha;
	private Date nascimento;
	private String idioma;
	private boolean ativo;
	private String celular;
	
	@ElementCollection(targetClass=String.class)
	@JoinTable(name="usuario_permissao",
	uniqueConstraints={@UniqueConstraint(columnNames={"usuario","permissao"})},
	joinColumns=@JoinColumn(name="usuario"))
	@Column(name="permissao",length=50)
	private List<String> permissao = new ArrayList<>();
	@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
	@JoinTable(name="usuario_demanda",joinColumns=@JoinColumn(name="usuario_id"),inverseJoinColumns=@JoinColumn(name="demanda_id"))
	private List<Demanda> demandas;
	
	
	
	public List<String> getPermissao() {
		return permissao;
	}

	public void setPermissao(List<String> permissao) {
		this.permissao = permissao;
	}

	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public Integer getId() {
		return id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getEmail() {
		return email;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String getLogin() {
		return login;
	}
	
	public void setLogin(String login) {
		this.login = login;
	}
	
	public String getSenha() {
		return senha;
	}
	
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public Date getNascimento() {
		return nascimento;
	}
	
	public void setNascimento(Date nascimento) {
		this.nascimento = nascimento;
	}
	
	public String getIdioma() {
		return idioma;
	}
	
	public void setIdioma(String idioma) {
		this.idioma = idioma;
	}
	
	public boolean isAtivo() {
		return ativo;
	}
	
	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}
	
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (ativo ? 1231 : 1237);
		result = prime * result + ((celular == null) ? 0 : celular.hashCode());
		result = prime * result + ((email == null) ? 0 : email.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((idioma == null) ? 0 : idioma.hashCode());
		result = prime * result + ((login == null) ? 0 : login.hashCode());
		result = prime * result
				+ ((nascimento == null) ? 0 : nascimento.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((permissao == null) ? 0 : permissao.hashCode());
		result = prime * result + ((senha == null) ? 0 : senha.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Usuario other = (Usuario) obj;
		if (ativo != other.ativo)
			return false;
		if (celular == null) {
			if (other.celular != null)
				return false;
		} else if (!celular.equals(other.celular))
			return false;
		if (email == null) {
			if (other.email != null)
				return false;
		} else if (!email.equals(other.email))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (idioma == null) {
			if (other.idioma != null)
				return false;
		} else if (!idioma.equals(other.idioma))
			return false;
		if (login == null) {
			if (other.login != null)
				return false;
		} else if (!login.equals(other.login))
			return false;
		if (nascimento == null) {
			if (other.nascimento != null)
				return false;
		} else if (!nascimento.equals(other.nascimento))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (permissao == null) {
			if (other.permissao != null)
				return false;
		} else if (!permissao.equals(other.permissao))
			return false;
		if (senha == null) {
			if (other.senha != null)
				return false;
		} else if (!senha.equals(other.senha))
			return false;
		return true;
	}
	
	
}

e a classe Demanda abaixo:

package br.com.controle.demanda;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.controle.usuairo.Usuario;


@Entity
public class Demanda implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	private Integer id;
	
	private String nomeDemanda;
	@Temporal(TemporalType.DATE)
	private Date dataCriacao; 
	@Temporal(TemporalType.TIME)
	private Date horaCriacao;
	
	private String descricaoDemanda;
	@ManyToMany(mappedBy="demandas",cascade={CascadeType.PERSIST,CascadeType.MERGE})
	private List<Usuario> usuarios;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNomeDemanda() {
		return nomeDemanda;
	}

	public void setNomeDemanda(String nomeDemanda) {
		this.nomeDemanda = nomeDemanda;
	}

	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public Date getHoraCriacao() {
		return horaCriacao;
	}

	public void setHoraCriacao(Date horaCriacao) {
		this.horaCriacao = horaCriacao;
	}

	public String getDescricaoDemanda() {
		return descricaoDemanda;
	}

	public void setDescricaoDemanda(String descricaoDemanda) {
		this.descricaoDemanda = descricaoDemanda;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dataCriacao == null) ? 0 : dataCriacao.hashCode());
		result = prime
				* result
				+ ((descricaoDemanda == null) ? 0 : descricaoDemanda.hashCode());
		result = prime * result
				+ ((horaCriacao == null) ? 0 : horaCriacao.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((nomeDemanda == null) ? 0 : nomeDemanda.hashCode());
		result = prime * result
				+ ((usuarios == null) ? 0 : usuarios.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Demanda other = (Demanda) obj;
		if (dataCriacao == null) {
			if (other.dataCriacao != null)
				return false;
		} else if (!dataCriacao.equals(other.dataCriacao))
			return false;
		if (descricaoDemanda == null) {
			if (other.descricaoDemanda != null)
				return false;
		} else if (!descricaoDemanda.equals(other.descricaoDemanda))
			return false;
		if (horaCriacao == null) {
			if (other.horaCriacao != null)
				return false;
		} else if (!horaCriacao.equals(other.horaCriacao))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (nomeDemanda == null) {
			if (other.nomeDemanda != null)
				return false;
		} else if (!nomeDemanda.equals(other.nomeDemanda))
			return false;
		if (usuarios == null) {
			if (other.usuarios != null)
				return false;
		} else if (!usuarios.equals(other.usuarios))
			return false;
		return true;
	}

	
	
}

Essas duas classes estão criando uma tabela chamada usuario_demanda, mas não consigo inseri quando vou inseri qualquer dado ele insere normal na tabela de Usuario e na tabela Demanda na de relacionamento nada. Segue abaixo também o codigo da DAO

UsuarioDAOHibernate

package br.com.controle.usuairo;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;


public class UsuarioDAOHibernate implements UsuarioDAO {

	private Session session;
	
	
	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	@Override
	public void salvar(Usuario usuario) {
		this.session.save(usuario);
		
	}

	@Override
	public void atualizar(Usuario usuario) {
		if(usuario.getPermissao()==null || usuario.getPermissao().size() ==0){
			Usuario usuarioPermissao = this.selecionar(usuario.getId());
			usuario.setPermissao(usuarioPermissao.getPermissao());
			this.session.evict(usuarioPermissao);
		}
		
		this.session.update(usuario);
	}

	@Override
	public void excluir(Usuario usuario) {
		this.session.delete(usuario);
		
	}

	@Override
	public Usuario selecionar(Integer codigo) {
		return (Usuario) this.session.get(Usuario.class, codigo);
		
	}

	@Override
	public Usuario buscaPorLogin(String login) {
		
		String hql = "select u from Usuario u where u.login=:login";
		
		Query consulta = this.session.createQuery(hql);
		
		consulta.setString("login", login);
		
		return (Usuario) consulta.uniqueResult();
		
	}

	@Override
	public List<Usuario> listar() {
		
		return this.session.createCriteria(Usuario.class).list();
	}
	
	
}

DemandaDAOHibernate

package br.com.controle.demanda;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;


public class DemandaDAOHibernate implements DemandaDAO {

	private Session session;
	
	
	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	@Override
	public void salvar(Demanda demanda) {
		this.session.save(demanda);
		
		
	}

	@Override
	public void atualiar(Demanda demanda) {
		this.session.update(demanda);
		
	}

	@Override
	public void excluir(Demanda demanda) {
		this.session.delete(demanda);
		
	}

	@Override
	public Demanda selecionar(Integer id) {
		
		return (Demanda) this.session.get(Demanda.class, id);
	}

	@Override
	public Demanda buscarNome(String nome) {
		
		String hql = "select d from Demanda d where d.nomeDemanda=:nome;";
		
		Query consulta = this.session.createQuery(hql);
		
		consulta.setString("nome", nome);
		
		return (Demanda) consulta.uniqueResult();
	}

	@Override
	public List<Demanda> listar() {
		
		return this.session.createCriteria(Demanda.class).list();
	}

	
	
	
}

Se alguém souber o erro porque não está inserindo nessa tabela de relacionamento eu agradeço.

Cara,

posta o seu erro, mas tenta fazer setar o usuario em demanda e demanda em usuario.

t+

O erro é o seguinte essas classes criam uma tabela usuário, uma tabela demanda e uma tabela usuario_demanda para dizer quais as demandas de quais usuários onde um usuário pode ter varias demandas e uma demanda pode ser de vários usuários. Quando eu crio um usuário ele é adicionado normalmente na tabela demanda, mas quando eu adiciono uma nova demanda a um usuário ele não referencia ao usuário logado no sistema, ou seja, não adiciona valores na tabela usuario_demanda apenas na tabela demanda é essa minha dúvida como fazer para quando adicionar uma demanda ele adicionar um registro na tabela usuario_demanda com o usuário logado no sistema e com a demanda adicionada?

cara,

tenta o seguinte, na sua classe usuarios, no atributo demandas coloca o cascadetype.all e na classe demanda coloca no atributo usuarios, todas as cascadetype removendo o persist.

t+

Ok vou tentar fazer isso vlww pela dica