Nhibernate Создать неправильный SQL для Oracle с блокировкой - PullRequest
1 голос
/ 26 июля 2010

вчера я пытался заставить этот код работать, несмотря на тот факт, что он просто отлично работает с nhibernate и SQL-сервером, но когда он приходит в Oracle, он генерирует неправильный sql

UnitOfWork.Current.CreateCriteria<Bill>().Add(Restrictions.IsEmpty("ReqId"))
.SetMaxResults(BatchSize).SetLockMode(LockMode.Upgrade).List<Bill>();

сгенерированный SQL будет что-то вроде

Select * from 
(Select bill_0.id,bill_0.BillNo ...... from Bill bill_0 where bill_0.reqId is Not null )
where ROWNUM < 10 for UPDATE of bill_0.ID

так что я не буду работать, потому что союзники bill_o определены внутри внутреннего оператора SQL, так кто же получил решение?

правильный sql был бы что-то вроде этого, который я попробовал и работал на oracle db

Select bill_0.id,bill_0.BillNo ...... from Bill bill_0 
where bill_0.reqId is Not null and ROWNUM < 10 for UPDATE of bill_0.ID

1 Ответ

1 голос
/ 26 июля 2010

Поскольку, как вы говорите, NHibernate генерирует неверный Oracle SQL, я предлагаю вам сообщить об ошибке сотрудникам NHibernate. SQL работал бы, если бы встроенному представлению был назначен псевдоним "bill_0", или если предложение FOR UPDATE не использовало псевдоним таблицы ("для UPDATE of ID"). Боюсь, я не знаю, можете ли вы изменить свои вызовы NHibernate, чтобы сделать что-то из этого.

...