When I try to save a n / n using the set, and that the class contains attributes most of this error. 
Someone would say this because I
Diagram
 
classe Usuario.hbm.xml
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHOR" namespace="NHOR" default-cascade="save-update">
   <class name="Usuario" table="USUARIO">
      <id name="IdUsuario" column="idUsuario" type="Int32" unsaved-value="0">
         <generator class="native"/>
      </id>
      <property column="nome" type="String" name="Nome" not-null="true" length="50" />
      <property column="idade" type="Int32" name="Idade" />
      <many-to-one name="IdUf" column="idUf" class="Uf" />
      <many-to-one name="IdCidade" column="idCidade" class="Cidade" />
    <set name="UsuarioperfilList">
      <key column="idUsuario"/>
      <many-to-many class="Usuarioperfil">
        <column name="IdUsuario"/>
        <column name="IdPerfil"/>
      </many-to-many>
    </set>
  </class>
</hibernate-mapping>
class Usuario.cs
Code:
using System;
using System.Collections.Generic;
using System.Collections;
using NHOR.DAL;
using Iesi.Collections;
namespace NHOR
{
    [Serializable]
    public class Usuario : IEquatable<Usuario>
    {
        #region Private Members
        private int _idusuario;
        private string _nome;
        private int? _idade;
        private Uf _iduf;
        private Cidade _idcidade;
        private ISet _UsuarioperfilList;
        #endregion
        #region Constructor
        public Usuario()
        {
            _idusuario = 0;
            _nome = String.Empty;
            _idade = new int?();
            _UsuarioperfilList = new HashedSet();
        }
        public Usuario(bool altera)
        {
            _idusuario = 0;
            _nome = String.Empty;
            _idade = new int?(); 
            _iduf = new Uf();
            _idcidade = new Cidade();
            _UsuarioperfilList = new HashedSet();
        }
        #endregion // End of Default ( Empty ) Class Constuctor
        #region Required Fields Only Constructor
        /// <summary>
        /// required (not null) fields only constructor
        /// </summary>
        public Usuario(
            int idusuario,
            string nome,
            Uf iduf,
            Cidade idcidade)
            : this()
        {
            _idusuario = idusuario;
            _nome = nome;
            _idade = null;
            _iduf = iduf;
            _idcidade = idcidade;
        }
        #endregion // End Constructor
        #region Public Properties
        public virtual int IdUsuario
        {
            get
            {
                return _idusuario;
            }
            set
            {
                _idusuario = value;
            }
        }
        
        public virtual string Nome
        {
            get
            {
                return _nome;
            }
            set
            {
                if (value == null)
                    throw new ArgumentOutOfRangeException("Null value not allowed for Nome", value, "null");
                if (value.Length > 50)
                    throw new ArgumentOutOfRangeException("Invalid value for Nome", value, value.ToString());
                _nome = value;
            }
        }
        public virtual int? Idade
        {
            get
            {
                return _idade;
            }
            set
            {
                _idade = value;
            }
        }
        public virtual Uf IdUf
        {
            get
            {
                return _iduf;
            }
            set
            {
                if (value == null)
                    throw new ArgumentOutOfRangeException("Null value not allowed for IdUf", value, "null");
                _iduf = value;
            }
        }
        public virtual Cidade IdCidade
        {
            get
            {
                return _idcidade;
            }
            set
            {
                if (value == null)
                    throw new ArgumentOutOfRangeException("Null value not allowed for IdCidade", value, "null");
                _idcidade = value;
            }
        }
        public virtual ISet UsuarioperfilList
        {
            get
            {
                return _UsuarioperfilList;
            }
            set
            {
                _UsuarioperfilList = value;
            }
        }
        #endregion
        #region Public Functions
        public virtual void AddUsuarioperfil(Usuarioperfil obj)
        {
            #region Check if null
            if (obj == null)
                throw new ArgumentNullException("obj", "Il parametro non può essere nullo");
            #endregion
            _UsuarioperfilList.Add(obj);
        }
        /// <summary>
        /// Método para salvar o objeto
        /// </summary>
        /// <returns></returns>
        public virtual Usuario SalvaUsuario(Usuario _objUsuario)
        {
            return USUARIODAL.SalvaUsuario(_objUsuario);
        }
        /// Método para salvar o objeto
        /// </summary>
        /// <returns></returns>
        public virtual Usuario SalvaUsuario()
        {
            return USUARIODAL.SalvaUsuario(this);
        }
        /// <summary>
        /// Método para deletar o objeto
        /// </summary>
        /// <returns></returns>
        public virtual void ExcluiUsuario(Usuario _objUsuario)
        {
            USUARIODAL.ExcluirUsuario(_objUsuario);
        }
        /// <summary>
        /// Método para retornar todos itens
        /// </summary>
        /// <returns></returns>
        public virtual IList<Usuario> RetornaUsuario()
        {
            return USUARIODAL.RetornaUsuario();
        }
        /// <summary>
        /// Método para retornar um item
        /// </summary>
        /// <returns></returns>
        public virtual Usuario RetornaUsuario(int id)
        {
            return USUARIODAL.RetornaUsuario(id);
        }
        #endregion //Public Functions
        #region Equals And HashCode Overrides
        /// <summary>
        /// local implementation of Equals based on unique value members
        /// </summary>
        public override bool Equals(object obj)
        {
            if (this == obj) return true;
            if ((obj == null) || (obj.GetType() != this.GetType())) return false;
            Usuario castObj = (Usuario)obj;
            return (castObj != null) &&
                (this._idusuario == castObj.IdUsuario);
        }
        /// <summary>
        /// local implementation of GetHashCode based on unique value members
        /// </summary>
        public override int GetHashCode()
        {
            int hash = 57;
            hash = 27 ^ hash ^ _idusuario.GetHashCode();
            return hash;
        }
        #endregion
        #region IEquatable members
        public bool Equals(Usuario other)
        {
            if (other == this)
                return true;
            return (other != null) &&
                (this._idusuario == other.IdUsuario);
        }
        #endregion
    }
}
Classe Usuarioperfil.hbm.xml
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHOR" namespace="NHOR" default-cascade="save-update">
  <class name="Usuarioperfil" table="USUARIOPERFIL">
    <composite-id unsaved-value="none">
      <key-property name="IdUsuario" type="Int32" column="idUsuario"/>
      <key-property name="IdPerfil" type="Int32" column="idPerfil"/>
    </composite-id>
    <property column="ativo" type="Boolean" name="Ativo" />
  </class>
</hibernate-mapping>
class Usuarioperfil.cs
Code:
using System;
using System.Collections.Generic;
namespace NHOR
{
    [Serializable]
    public class Usuarioperfil : IEquatable<Usuarioperfil>
    {
        #region Private Members
        private int _idusuario;
        private int _idperfil;
        private bool? _ativo;
        #endregion
        #region Constructor
        public Usuarioperfil()
        {
            _idusuario = 0;
            _idperfil = 0;
            _ativo = new bool?();
        }
        #endregion // End of Default ( Empty ) Class Constuctor
        #region Required Fields Only Constructor
        /// <summary>
        /// required (not null) fields only constructor
        /// </summary>
        public Usuarioperfil(
            int idusuario,
            int idperfil)
            : this()
        {
            _idusuario = idusuario;
            _idperfil = idperfil;
            _ativo = null;
        }
        public Usuarioperfil(
            int idusuario,
            int idperfil,bool ativo)
            : this()
        {
            _idusuario = idusuario;
            _idperfil = idperfil;
            _ativo = ativo;
        }
        #endregion // End Constructor
        #region Public Properties
        public virtual int IdUsuario
        {
            get
            {
                return _idusuario;
            }
            set
            {
                _idusuario = value;
            }
        }
        public virtual int IdPerfil
        {
            get
            {
                return _idperfil;
            }
            set
            {
                _idperfil = value;
            }
        }
        public virtual bool? Ativo
        {
            get
            {
                return _ativo;
            }
            set
            {
                _ativo = value;
            }
        }
        #endregion
        #region Public Functions
       
        #endregion //Public Functions
        #region Equals And HashCode Overrides
        /// <summary>
        /// local implementation of Equals based on unique value members
        /// </summary>
        public override bool Equals(object obj)
        {
            if (this == obj) return true;
            if ((obj == null) || (obj.GetType() != this.GetType())) return false;
            Usuarioperfil castObj = (Usuarioperfil)obj;
            return (castObj != null) &&
                (this._idusuario == castObj.IdUsuario) &&
                (this._idperfil == castObj.IdPerfil);
        }
        /// <summary>
        /// local implementation of GetHashCode based on unique value members
        /// </summary>
        public override int GetHashCode()
        {
            int hash = 57;
            hash = 27 ^ hash ^ _idusuario.GetHashCode();
            hash = 27 ^ hash ^ _idperfil.GetHashCode();
            return hash;
        }
        #endregion
        #region IEquatable members
        public bool Equals(Usuarioperfil other)
        {
            if (other == this)
                return true;
            return (other != null) &&
                (this._idusuario == other.IdUsuario) &&
                (this._idperfil == other.IdPerfil);
        }
        #endregion
    }
}
Salvando
Code:
public static Usuario SalvaUsuario(Usuario _objUsuario)
        {
            ISession session = NHibernateHelper.GetCurrentSession();
            ITransaction tx = session.BeginTransaction();
            try
            {
                session.Transaction.Begin();
                session.SaveOrUpdate(_objUsuario);
                session.Transaction.Commit();
                session.Flush();
                session.Close();
            }
            catch (Exception ex)
            {
                session.Transaction.Rollback();
                throw ex;
            }
            return _objUsuario;
        }
        
Code:
NHibernateHelper.CloseSession();
        Usuario u = new Usuario(true);
        u.Idade = Convert.ToInt32(IdadeTextBox.Text);
        u.IdCidade.IdCidade = Convert.ToInt32(IdCidadeDropDownList.Text);
        u.IdUf.IdUf = Convert.ToInt32(IdUfDropDownList.SelectedValue);
        u.Nome = NomeTextBox.Text;
        if (IdUsuarioLabel.Text != "")
        {
            u.IdUsuario = Convert.ToInt32(IdUsuarioLabel.Text);
        }
        for (int i = 0; i < CheckBoxList1.Items.Count; i++)
        {
            if (CheckBoxList1.Items[i].Selected == true)
            {
                Usuarioperfil us = new Usuarioperfil();
                us.Ativo = true;
                us.IdPerfil = Convert.ToInt32(CheckBoxList1.Items[i].Value);
                u.UsuarioperfilList.Add(us);
            }
        }
        
        u = u.SalvaUsuario();