"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

Responder a