Pregunta

¿Por qué la siguiente consulta HQL fallar?

string hql = @"delete MyLog log
               where
                    log.UtcTimestamp < :threshold and
                    log.Configuration.Application = :application";

session.CreateQuery(hql)
       .SetDateTime("threshold", threshold)
       .SetEnum("application", this.application)
       .ExecuteUpdate();

La misma forma de consulta funciona cuando se utiliza en un selecto:

string hql = @"from MyLog log
               where
                    log.UtcTimestamp < :threshold and
                    log.Configuration.Application = :application";
IList<MyLog> log = session.CreateQuery(hql)
    .SetDateTime("threshold", threshold)
    .SetEnum("application", this.application)
    .List<MyLog>();

El mapeo para MyLog contiene:

References(x => x.Configuration)
     .Columns("CONFIGURATION_ID")
     .ReadOnly();      

El mapeo para la configuración contiene:

Map(x => x.Application, "APPLICATION_ID");

El error que consigo es:

  

eliminar de mylog, CONFIGURACIÓN   countercon1_ donde UTC_TIMESTAMP <: p0   y APPLICATION_ID = p1; : P0 =   04/10/2010 17:15:52,: p1 = 7

     

NHibernate.Exceptions.GenericADOException:   No se pudo ejecutar consulta de actualización [SQL:

     

eliminar de mylog, CONFIGURACIÓN   countercon1_ donde UTC_TIMESTAMP      

] --->   Oracle.DataAccess.Client.OracleException:   ORA-00933: no ordena correctamente SQL   terminado

¿Fue útil?

Solución

Prueba esto:

delete MyLog log
where log.id in
          (select l.id
           from MyLog l
           where l.UtcTimestamp < :threshold and
           and.Configuration.Application = :application)

Otros consejos

Desde el enlace presentado por Rafael arriba:

http: // docs. jboss.org/hibernate/stable/core/reference/en/html/batch.html#batch-direct

  

No se une, ya sea implícita o explícita,   se puede especificar en una consulta HQL mayor.   Sub-consultas se pueden utilizar en el   donde cláusula, donde las subconsultas   a su vez pueden contener une

La sintaxis es DELETE FROM MyLog ....

Tenga en cuenta que HQL borrado no está cascadas de honor definidos con (n) de hibernación asignaciones.

Así que usted puede seleccionar todas las entidades y eliminarlos uno por uno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top