NHIbernate Newbie: Может кто-нибудь объяснить, почему NHibernate пытается выполнить обновление базы данных во время выполнения CreateQuery - PullRequest
1 голос
/ 10 марта 2010

По сути, я хочу получить отфильтрованный набор объектов из базы данных (Oracle 9.2) на основе свойства id объекта PsalertsEvent. Код выполняется:

Public Overloads Function GetAll(ByVal laterThan As Long, ByVal filteredPsalertsEvents     As IList) As IList Implements IPsalertsEventRepo.GetAll
        'Get all psalerts events with an ID greater then the specified laterThan parameter
        filteredPsalertsEvents = MyBase.NHibernateSession.CreateQuery("from PsalertsEvent p where p.id > " & laterThan).List
        Return filteredPsalertsEvents
End Function

NUnit генерирует следующий текстовый вывод:

***** PsalertsIp.Tests.Data.PSALERTSEventRepoTests.CanGetUnprocessedPsalertsEvents

NHibernate: выберите max (psalertsev0_.Id) как col_0_0_ из ALARM_REPLAY_NEW psalertsev0_ NHibernate: выберите psalertsev0_.Id в Id0_, psalertsev0_.ALARM_SUBSTATION_NAME как ALARM2_0_, psalertsev0_.ALARM_BUSBAR_NUM как ALARM3_0_, psalertsev0_.ALARM_COMPONENT_ALIAS как ALARM4_0_, psalertsev0_.ALARM_NAME как ALARM5_0_, psalertsev0_.ALARM_TEXT как ALARM6_0_, psalertsev0_.ALARM_TIME как ALARM7_0_ из ALARM_REPLAY_NEW psalertsev0_ где psalertsev0_. Id> 20118832 NHibernate: ОБНОВИТЬ ALARM_REPLAY_NEW УСТАНОВИТЬ ALARM_SUBSTATION_NAME =: p0, ALARM_BUSBAR_NUM =: p1, ALARM_COMPONENT_ALIAS =: p2, ALARM_NAME =: p3, ALARM_TEXT =: p4, ALARM_TIME =; P: P1 = P = WH: = 0,: p2 = «Текст значения»,: p3 = NULL,: p4 = «ЗАКРЫТО»,: p5 = 10/03/2010 15:06:31,: p6 = 20118833 15: 06: 56,389 ОШИБКА [TestRunnerThread] AbstractBatcher [(null)] - Не удалось выполнить команду: ОБНОВИТЬ ALARM_REPLAY_NEW УСТАНОВИТЬ ALARM_SUBSTATION_NAME =: p0, ALARM_BUSBAR_NUM =: p1, ALARM_COMPONENT_ALIAS =: PARM = PARM = ALARM: PARM = ALM: PARM = PARM: ALARM: PARM = ALM: PARM = ALM =: p5 ГДЕ Id =: p6 Oracle.DataAccess.Client.OracleException ORA-01031: недостаточные привилегии в Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoStlcrcSlcr2 * String2, String String2, String String), String2, String, String, String, String.

в Oracle.DataAccess.Client.OracleException.HandleError (Int32 errCode, OracleConnection conn, строковая процедура, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src)

в Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery ()

в NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery (IDbCommand cmd)

NUnit проходит соответствующий тест, однако впоследствии генерируется ошибка с центром в исключении оракула:

Oracle.DataAccess.Client.OracleException ORA-01031: недостаточные права доступа

Ответы [ 2 ]

3 голосов
/ 10 марта 2010

Не видя ваше сопоставление, невозможно дать вам точный ответ, но наиболее вероятный ответ заключается в том, что вы столкнулись с проблемой, называемой призраком, для которой требуется небольшое Ghost Busting .

Хотя есть несколько причин, наиболее вероятной причиной является то, что у вашего PsalertsEvent есть перечисление, которое не отображается должным образом через IUserType.

0 голосов
/ 10 марта 2010

Вероятно, это происходит потому, что один или несколько объектов, которые будут возвращены запросом, имеют изменения, которые не были сохранены. NHibernate пытается быть полезным, обеспечивая согласованность ваших объектов в памяти. Для этого необходимо обновить базу данных перед выполнением запроса. Как упоминалось ранее, это может быть вызвано «призраками» или явными изменениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...