"Ya esta definida y no puede ser cambiada", sin embargo la pudiste cambiar (para peor) la clave primaria. En un párrafo decís una cosa, y en otro párrafo decís otra? Modificar la clave primaria de una tabla no se considera modificar "la estructura de datos"?
El 14 de junio de 2010 10:08, Erika Fernández <[email protected]>escribió: > Jose, como mencioné al final de mi ultimo mensaje, la estructura de > datos ya esta definida y no puede ser cambiada. > > Encontre cual era mi problema. Esta mal la PK en la base de datos, > porque un objeto empleado tiene como PK los campos NRO_EMPLEADO y > CONTADOR. Pero en la tabla solo el campo NRO_EMPLEADO formaba parte de > la PK, lo cual es un error, porque seria un objeto incompleto. > Agregando el CONTADOR a la PK, entonces se fue el problema. > > Muchas gracias a todos. > > Erika > > On 10 jun, 09:09, José F. Romaniello <[email protected]> wrote: > > Erika, sin exagerar creo que es una de las peores claves primaria que he > > visto en mi vida: > > > > <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> > > > > vos te has dado cuenta que la clave primaria de esa tabla esta compuesta > por > > CINCO! 5! columnas? > > > > No me quiero imaginar cuando haya algo que apunte a Novedad. > > > > Por otro lado y ya yendo al grano, esta parte me suena rara: > > > > <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> > > > > Como es eso?, lo tenes en la clave primaria y luego lo tenes como > > many-to-one? Para que?, si ya lo tenes como key-many-to-one..... Otra > cosa > > que me suena rara, es que en la clave primaria pusiste: > > <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> > > > > osea pusiste CONTADOR_LIC... Sin embargo en la many to one pusiste solo > > CONTADOR. > > > > Consejo 1: > > La base de datos esta fea, y eso debería entenderlo hasta alguien que no > ha > > usado un ORM en su vida. Es simplemente un mal diseño. > > > > Consejo 2: > > En este escenario, es preferible no mapear algo dos veces (por mas que > > pongas insert="false" update="false"), no parece lógico. > > En el peor de los casos si queres tener una propiedad Empleado, podes > usar > > esto: > > public virtual Empleado Empleado {get{ return Id.Empleado; } } > > De tipo solo lectura, y no uses esa propiedad para escribir consultas > > nhibernate. No le veo mucho sentido..... > > > > Consejo 2: > > Tus clases deberían estar en singular: Empleado, Novedad... También hay > una > > propiedad que se llama "Empleados" , si yo veo esto, esperaría ver una > > colección de empleados, sin embargo es una sola entidad empleado. > > > > El 10 de junio de 2010 08:35, Erika Fernández <[email protected] > >escribió: > > > > > > > > > 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"> > > > > ... > > > > leer más »- 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 > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
