Carlos: Muchas gracias por tu ayuda. Con respecto a la definicion de las columnas, esta es necesaria. de no hacerlo tira la siguiente excepcion.
Foreign key (FK_NOV_LIC:T_NOVEDADES [Licencia])) must have same number of columns as the referenced primary key (T_LICENCIAS [ID_LICENCIA, CONTADOR]) La otra solucion que planteas utilizando el algoritmo hi-lo... estuve leyendo la documentacion, pero no me queda claro si se puede utilizar con composite-ids. La estructura de base de datos, es de un sistema que ya esta en producción, por lo cual es imposible (lamentablemente) cambiarla. Muchas gracias, Erika On 9 jun, 19:32, Carlos Cocom <[email protected]> wrote: > Hola Erika > > A simple vista veo que tu mapping dentro de la sección donde defines del > composite-id estas definiendo las columnas, lo que parece estar erróneo. > > Aquí para mas referencia > > http://nhforge.org/doc/nh/en/index.html#mapping-declaration-id-assigned > > En lo personal no tenido que utilizar el composite-id no has pensado usar un > simple id como hi-lo, secuence u otro. Ya que la ventaja que te da en tu > repositorio de la forma en que lo utilizas es que no se dupliquen si tienes > marcado ese como llave primaria. > > Sin embargo esto lo puedes seguir haciendo, para ello al momento de guardar > haces un hql para saber si ya existe y evitar duplicados. > > Carlos > > El 9 de junio de 2010 14:45, Erika Fernández <[email protected]>escribió: > > > > > Hola a todos! Tengo un problema con una excepcion que me tira, al > > tratar de hacer un SELECT. > > > Les copio los archivos de mapeo y objetos. > > > //OBJETOS > > > namespace Ausentismo.ClasesDelDominio > > { > > class Novedades > > { > > public Novedades() > > { > > > } > > > protected Novedades_Id id; > > > public virtual Novedades_Id Id > > { > > get { return id; } > > set { id = value; } > > } > > > private Licencias licencia; > > > public virtual Licencias Licencia > > { > > get { return licencia; } > > set { licencia = value; } > > } > > > protected Empleados empleado; > > > public virtual Empleados Empleado > > { > > get { return empleado; } > > set { empleado = value; } > > } > > > protected int contador; > > > public virtual int Contador > > { > > get { return contador; } > > set { contador = value; } > > } > > > protected DateTime fecha_hasta; > > > public virtual DateTime Fecha_hasta > > { > > get { return fecha_hasta; } > > set { fecha_hasta = value; } > > } > > > protected int cant_dias; > > > public virtual int Cant_dias > > { > > get { return cant_dias; } > > set { cant_dias = value; } > > } > > > protected string justificada; > > > public virtual string Justificada > > { > > get { return justificada; } > > set { justificada = value; } > > } > > > protected string usuario_alta; > > > public virtual string Usuario_alta > > { > > get { return usuario_alta; } > > set { usuario_alta = value; } > > } > > > protected DateTime fecha_alta; > > > public virtual DateTime Fecha_alta > > { > > get { return fecha_alta; } > > set { fecha_alta = value; } > > } > > > protected string usuario_modif; > > > public virtual string Usuario_modif > > { > > get { return usuario_modif; } > > set { usuario_modif = value; } > > } > > > protected DateTime fecha_modif; > > > public virtual DateTime Fecha_modif > > { > > get { return fecha_modif; } > > set { fecha_modif = value; } > > } > > > protected int anio; > > > public virtual int Anio > > { > > get { return anio; } > > set { anio = value; } > > } > > > } > > > namespace Ausentismo.ClasesDelDominio.IDs > > { > > class Novedades_Id: ISerializable > > { > > public Novedades_Id() > > { > > > } > > > private Empleados empleado; > > > protected virtual Empleados Empleado > > { > > get { return empleado; } > > set { empleado = value; } > > } > > > private Licencias licencia; > > > protected virtual Licencias Licencia > > { > > get { return licencia; } > > set { licencia = value; } > > } > > > protected DateTime fecha_desde; > > > protected virtual DateTime Fecha_desde > > { > > get { return fecha_desde; } > > set { fecha_desde = value; } > > } > > > // override object.Equals > > public override bool Equals(object obj) > > { > > > if (obj == null || GetType() != obj.GetType()) > > { > > return false; > > } > > // TODO: write your implementation of Equals() here. > > if ((this.Licencia == ((Novedades_Id)obj).Licencia) && > > this.Empleado==((Novedades_Id)obj).Empleado && this.fecha_desde > > ==((Novedades_Id)obj).fecha_desde) > > return true; > > else return false; > > > } > > > // override object.GetHashCode > > public override int GetHashCode() > > { > > // TODO: write your implementation of GetHashCode() here. > > int hash = 13; > > hash += (null == this.Empleado ? 0 : > > this.Empleado.GetHashCode()); > > hash += (null == this.Licencia ? 0 : > > this.Licencia.GetHashCode()); > > hash += (null == this.Fecha_desde ? 0 : > > this.Fecha_desde.GetHashCode()); > > > return hash; > > > } > > > #region Miembros de ISerializable > > > void ISerializable.GetObjectData(SerializationInfo info, > > StreamingContext context) > > { > > throw new Exception("The method or operation is not > > implemented."); > > } > > > #endregion > > } > > > //ARCHIVO DE MAPEO > > > <?xml version="1.0" encoding="utf-8" ?> > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > > assembly="Ausentismo" > > namespace="Ausentismo.ClasesDelDominio"> > > <class name="Novedades" table="T_NOVEDADES" schema="SOLIDARIDAD"> > > <composite-id class="Ausentismo.ClasesDelDominio.IDs.Novedades_Id" > > name="Id" unsaved-value="none"> > > <key-many-to-one class="Licencias" name="Licencia" foreign- > > key="FK_NOV_LIC" lazy="false"> > > <column name="ID_LICENCIA" sql-type="number"/> > > <column name="CONTADOR_LIC" sql-type="number" /> > > </key-many-to-one> > > <key-many-to-one class="Empleados" name="Empleado" foreign- > > key="FK_EMPLEADO" lazy="false"> > > <column name="NRO_EMPLEADO"/> > > <column name="CONTADOR"/> > > </key-many-to-one> > > <key-property name="Fecha_desde" column="FECHA_DESDE" > > type="DateTime"/> > > </composite-id> > > <many-to-one class="Licencias" foreign-key="FK_NOV_LIC" > > insert="false" update="false" lazy="false" name="Licencia"> > > <column name="ID_LICENCIA"/> > > <column name="CONTADOR"/> > > </many-to-one> > > <many-to-one class="Empleados" foreign-key="FK_EMPLEADO" > > insert="false" update="false" lazy="false" name="Empleado"> > > <column name="NRO_EMPLEADO"/> > > <column name="CONTADOR"/> > > </many-to-one> > > <property name="Contador" column="CONTADOR" type="int"/> > > <property name="Fecha_hasta" column="FECHA_HASTA" type="DateTime"/ > > > <property name="Cant_dias" column="CANT_DIAS" type="int"/> > > <property name="Justificada" column="JUSTIFICADA" type="string"/> > > <property name="Fecha_alta" column="FECHA_ALTA" type="DateTime"/> > > <property name="Usuario_alta" column="USUARIO_ALTA" type="string"/ > > > <property name="Fecha_modif" column="FECHA_MODIF" type="DateTime"/ > > > <property name="Usuario_modif" column="USUARIO_MODIF" > > type="string"/> > > <property name="Anio" column="ANIO" type="int"/> > > </class> > > </hibernate-mapping> > > > //HQL > > > public IList buscarNovedades(Empleados empleado, DateTime fechaDesde, > > DateTime fechaHasta) > > { > > session = HibernateUtil.SessionFactory.OpenSession(); > > > ITransaction transaction = session.BeginTransaction(); > > > String sql = "from Novedades n where n.Id.Empleado > > = :empleado "; > > //sql += " and n.Id.Fecha_desde between :fechaDesde > > and :fechaHasta"; > > IQuery q = session.CreateQuery(sql); > > q.SetParameter("empleado", empleado); > > q.SetDateTime("fechaDesde", fechaDesde); > > q.SetDateTime("fechaHasta", fechaHasta); > > IList listaMovimientos = q.List(); > > > session.Close(); > > if (listaMovimientos.Count != 0) > > return listaMovimientos; > > else return null; > > } > > > } > > } > > > La excepcion que tira es la siguiente: SqlNode's text did not > > reference expected number of columns > > > Supongo el problema es con mi composite-id, pero no encuentro nada que > > me ayude. Por favor!!! si alguien sabe algo, me vendria muy bien.. > > Gracias desde ya. > > > Erika > > > -- > > Para escribir al Grupo, hágalo a esta dirección: > > [email protected] > > Para más, visite:http://groups.google.com/group/NHibernate-Hispano- Ocultar > > texto de la cita - > > - Mostrar texto de la cita - -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
