Erro ao commitar

Estou utilizando primefaces + jpa, estou tendo um problema chato de se resolver, segue o código.

Classe modelo:

package br.com.sisapropriacao.modelo;

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

import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Sistema implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private Long idSistema;
	
	private String nomeSistema;
	private String descricao;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@Embedded
	private List<PerfilUsuario> usuarios = new ArrayList<PerfilUsuario>();
	
	getters e setters....
	
}
package br.com.sisapropriacao.modelo;

import java.io.Serializable;

import javax.faces.bean.SessionScoped;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.validation.Valid;

@Entity
@SessionScoped
public class PerfilUsuario implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id 
	@GeneratedValue
	private Long idUsuario;
	
	private String login;

	private String senha;
		
	private String nome;
	
	private String endereco;
	
	private String telefone;
	
	private String rg;
	
	private String cpf;
	
	private String complemento;
	
	private String bairro;
	
	private String horaTrabalhada;
	
	@Enumerated(EnumType.STRING)
	private TipoUsuario tipoUsuario;
	
	@Enumerated(EnumType.STRING)
	private TipoFuncionario tipoFuncionario;
	
	@Valid
	@OneToOne
	private Gerencia gerenciaVinculado;

       getters e setters...

Bean:

package br.com.sisapropriacao.mb;

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

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.model.DualListModel;

import br.com.sisapropriacao.dao.DAO;
import br.com.sisapropriacao.modelo.PerfilUsuario;
import br.com.sisapropriacao.modelo.Sistema;


@ManagedBean
@ViewScoped
public class SistemaBean implements Serializable{


	private static final long serialVersionUID = 1L;

	private Sistema sistema  = new Sistema();
	private List<Sistema> sistemas;
	
	private DualListModel<PerfilUsuario> usuarioModel;
	
	private PerfilUsuario perfilUsuario = new PerfilUsuario();
	
	private List<PerfilUsuario> usuariosSelecionados = new ArrayList<PerfilUsuario>();
	private List<PerfilUsuario> usuarios = new ArrayList<PerfilUsuario>();
	
	private List<PerfilUsuario> perfilUsuarios;
	
	public String gravar(){
		
		DAO<Sistema> dao = new DAO<Sistema>(Sistema.class);
		usuarios = usuarioModel.getSource();
		usuariosSelecionados = usuarioModel.getTarget();
			
		
		if(sistema.getIdSistema() == null){
			sistema.setUsuarios(usuariosSelecionados);
			dao.adiciona(sistema);
		}else{
			dao.atualiza(sistema);
		}
		
		//Lista os dados em tempo real com o banco
		this.sistemas = dao.listaTodos();
		
		//Quando for adicionar chama-se denovo o metodo para limpar os campos
		this.sistema = new Sistema();
		
		return "cadastroSistema?faces-redirect=true";
		
	}
	
	@PostConstruct
	public void carregaUsuarios() {
		System.out.println("Carregando usuários...");
		perfilUsuarios = new DAO<PerfilUsuario>(PerfilUsuario.class).listaTodos();
	}

	public List<PerfilUsuario> getPerfilUsuarios() {
		return perfilUsuarios;
	}
	
	public DualListModel<PerfilUsuario> getUsuarioModel(){

		 if(this.usuarioModel==null){ 
			 this.usuarioModel = new DualListModel<PerfilUsuario>(getPerfilUsuarios(), new ArrayList<PerfilUsuario>());
		 }
		 return this.usuarioModel;
	}

	getters e setters....
}

Então galera, da forma que está eu consigo listar os perfilUsuarios " Nome " e consigo recuperar os que são selecionados usuariosSelecionados = usuarioModel.getTarget(); só que ná hora que vou gravar ou setar os usuários selecionados sistema.setUsuarios(usuariosSelecionados); ele me informa que não consegue converter
String para Long, isso ocorre porque no mapeamento @ManyToOne ele já cria automaticamente a tabela de relacionamento sendo o campo de vinculação um Long. Então galera,
gostaria de saber como eu posso fazer para poder gravar somente a ID desses PerfilUsuario.

Obs.: Se eu colocar sistema.setUsuarios(getPerfilUsuarios()); ele grava e no banco ele grava a referência de todos os ids dos usuários.

Desculpa se ficou extenso mais quiz tentar deixar claro.

Pq tem o @Embedded no seu ManyToOne?

Não sei o porque eu coloquei essa anotação, então será por isso que ele me restringe a gravar um PerfilUsuario? Porque estou dizendo que aquele
objeto vai compor minha tabela. Eu retirei mais continua dando o mesmo erro. Mais alguem?