Pourquoi la requête HQL suivante échoue-t-elle?Pourquoi cette suppression HQL échoue-t-elle, lorsqu'une sélection HQL avec les mêmes termes fonctionne?
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 même forme de requête fonctionne lorsqu'il est utilisé dans un select:
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>();
Le mappage pour MyLog contient:
References(x => x.Configuration)
.Columns("CONFIGURATION_ID")
.ReadOnly();
Le mappage de configuration contient:
Map(x => x.Application, "APPLICATION_ID");
L'erreur que j'obtiens est:
supprimer mylog, CONFIGURATION countercon1_ où UTC_TIMESTAMP <: p0 et APPLICATION_ID =: p1; : = p0 04/10/2010 17:15:52,: p1 = 7
NHibernate.Exceptions.GenericADOException: ne pouvait pas exécuter la requête de mise à jour [SQL:
supprimer mylog, CONFIGURATION countercon1_ où UTC_TIMESTAMP <? et APPLICATION_ID =?
] ---> Oracle.DataAccess.Client.OracleException: ORA-00933: commande SQL pas correctement terminé
http://docs.jboss.org/hibernate/stable /core/reference/fr/html/batch.html#batch-direct – rebelliard
Pouvez-vous essayer http://www.codepaste.net/nmrne1? Ou peut-être http://www.codepaste.net/q5m8on? Il serait également rock si vous avez utilisé http://nhprof.com/ – rebelliard
+ 1. Merci Fafael. Il semble que le problème puisse être: "Aucune jointure, implicite ou explicite, ne peut être spécifiée dans une requête HQL en bloc. Les sous-requêtes peuvent être utilisées dans la clause where, où les sous-requêtes elles-mêmes peuvent contenir des jointures. ' –