Driver Informix

20 views
Skip to first unread message

XMANU

unread,
Apr 11, 2008, 3:54:15 PM4/11/08
to NHibernat...@googlegroups.com
Quiero usar nhibernate sobre informix, pero vi que no esta el driver. Mirando un poco los fuentes de nhibernate 2.0 veo que no es la gran cosa (aparentemente) incorporar un driver.

Seria cuestion de meter la siguiente clase a NHibernate.Driver y compilar, verdad?

namespace NHibernate.Driver
{
    /// <summary>
    /// A NHibernate Driver for using the IBM.Data.DB2 DataProvider.
    /// </summary>
    public class InformixDriver : ReflectionBasedDriver
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Informix"/> class.
        /// </summary>
        /// <exception cref="HibernateException">
        /// Thrown when the <c>IBM.Data.Informix</c> assembly can not be loaded.
        /// </exception>
        public Informix() : base(
            "IBM.Data.Informix",
            "IBM.Data.Informix.IfxConnection",
            "IBM.Data.Informix.IfxCommand")
        {
        }

        public override bool UseNamedPrefixInSql
        {
            get { return false; }
        }

        public override bool UseNamedPrefixInParameter
        {
            get { return false; }
        }

        public override string NamedPrefix
        {
            get { return String.Empty; }
        }

        public override bool SupportsMultipleOpenReaders
        {
            get { return false; }
        }
    }
}

Fabio Maulo

unread,
Apr 11, 2008, 4:21:52 PM4/11/08
to NHibernat...@googlegroups.com
Actualmente se está usando el Drive ODBC para Informix.

No necesitas modificar NH para el drive.
Podes meter el drive en un assebly tuyo y simplemente configurarlo en la configuración de NH.
Mas o menos vendría a ser:

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory>
        <property name="connection.driver_class">TuNameSpace.InformixDriver, TuAssembly</property>
        <property name="connection.connection_string">
            TuConnectionString
        </property>
        <property name="dialect">NHibernate.Dialect.InformixDialect</property>
    </session-factory>
</hibernate-configuration>

Bye.
Fabio Maulo.

2008/4/11, XMANU <manue...@gmail.com>:



--
Fabio Maulo

Ulisses - Gmail

unread,
Apr 11, 2008, 8:35:04 PM4/11/08
to NHibernat...@googlegroups.com

Hola

 

Quiero usar Inner Join com NHibernate, como debo hacer?

 

Gracias

 

Ulisses

Maria Barros

unread,
Apr 11, 2008, 9:26:24 PM4/11/08
to NHibernat...@googlegroups.com
Hola Ulises, usa HQL o Criteria.

2008/4/11 Ulisses - Gmail <uca...@gmail.com>:

Ulisses - Gmail

unread,
Apr 11, 2008, 9:33:06 PM4/11/08
to NHibernat...@googlegroups.com

Hola

 

http://traductor.universia.net/img/trans.gif

Usted tiene algún ejemplo? Yo quiero mostrar los Clientes y todos sus contactos como hago con El Nhibernate? con sql hago así

 

SELECT * From ( Clientes INNER JOIN Contactos ON Clientes.IdCliente = Contactos.IdClientes)

 

Gracias

 

Ulisses

Maria Barros

unread,
Apr 11, 2008, 10:00:08 PM4/11/08
to NHibernat...@googlegroups.com
En HQL sería, si no me equivoco algo asi:
IQuery q = s.CreateQuery("

SELECT * From ( Clientes INNER JOIN Contactos ON Clientes.IdCliente = Contactos.IdClientes)");

IList page = q.List();
Con Criteria:
            ICriteria crit = HibernateConfig.sesion.CreateCriteria(typeof(Contactos));
            crit.Add(Expression.Eq("IdClientes",IdCliente)); /*IdCliente es una propiedad del objeto cliente que puede recibir por parámtro la funcion*/
            List<object> Result= (List<object>)crit.List();

Nota: Es importante saber que cuando creas un objeto Cliente, y si un cliente tiene muchos contactos, entonces en tu clase Cliente vas a tener una propiedad que consistirá en una lista de contactos, yo lo encararia por ahi teniendo en cuenta que en tu objeto ya tenes los datos.
Igualmente te paso un link de la documentacion de NH que explican mas claramente HQL y Criteria.
http://www.hibernate.org/hib_docs/nhibernate/html/queryhql.html

Diego Jancic

unread,
Apr 11, 2008, 10:18:11 PM4/11/08
to NHibernat...@googlegroups.com

Hola,

En HQL no tenés ON en el inner join…

Basicamente podes usar HQL, Criteria o tu propio SqlQuery, aunque no creo que sea necesario para este caso…

Te recomiendo que veas la documentación, porque lo que te va a convenir seguramente es hacerte una vista o DTO o como lo quieras llamar (me refiero a un objeto que tenga solo los datos que necesitas, asi evitas cargar todo el cliente por cada contacto…)

 

Para lo ultimo podes mirar este thread reciente: http://groups.google.com/group/NHibernate-Hispano/browse_thread/thread/cb8375ddff68184a#

 

Saludos!,

Diego

 

p.d.: Tambien tene cuidado con el Criteria, porque no es asi... seria algo como:

ICriteria c = session.CreateCriteria(typeof(Cliente));

c.CreateCriteria(“Contacto”, “co”);

c.List();

Dario Quintana

unread,
Apr 11, 2008, 11:02:38 PM4/11/08
to NHibernat...@googlegroups.com

XMANU

unread,
Apr 15, 2008, 9:54:29 AM4/15/08
to NHibernat...@googlegroups.com
Tengo un problema con los stores procedures de informix, mapeo un named query de la siguiente manera:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test.Data" assembly="Test.Data">
  <class name="Establ" table="establ">
    <id name="Estab" type="string" unsaved-value="0">
      <column name="estab" sql-type="char(3)"/>
      <generator class="assigned"/>
    </id>
    <property name="Gls_estab" type="string">
      <column name="gls_estab"/>
    </property>
  </class>
  <sql-query name="query1">
    <return class="Establ">
      <return-property name="Estab" column="estab"/>
      <return-property name="Gls_estab" column="gls_estab"/>
    </return>
    execute procedure sp_testhibernate()
  </sql-query>
</hibernate-mapping>

El problema me salta en el column de la return-property ya que la informacion devuelta por los store procedures de informix no viene con nombres en strings, para decirlo mas claro, usando ado.net para manejar los datos devueltos se usa un DataReader y accede a la columna por index no por string.

Alguna sugerencia?

2008/4/11 Fabio Maulo <fabio...@gmail.com>:

Fabio Maulo

unread,
Apr 15, 2008, 10:12:22 AM4/15/08
to NHibernat...@googlegroups.com
El día 15/04/08, XMANU <manue...@gmail.com> escribió:
El problema me salta en el column de la return-property ya que la informacion devuelta por los store procedures de informix no viene con nombres en strings, para decirlo mas claro, usando ado.net para manejar los datos devueltos se usa un DataReader y accede a la columna por index no por string.

Alguna sugerencia?

Habría que probarlo bien en detalle para ver de implementar una solución multi-rdbms.
Podes meter un JIRA sobre ese tema ?
http://www.covalentsw.com:8080/jira/secure/Dashboard.jspa

Así no nos olvidamos de enfrentarlo en algun momento.
Gracias.
Fabio Maulo
Reply all
Reply to author
Forward
0 new messages