From: Vitaliy K. (JIRA) <nh...@gm...> - 2011-05-25 07:16:52
|
[ http://216.121.112.228/browse/NH-2740?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=21189#action_21189 ] Vitaliy Kryvosheiev commented on NH-2740: ------------------------------------------ Update: Looks like it is not working event if 2nd level cache is off. NHibernate version: 3.2.0.2001 > QueryOver does not work with 2nd level cache if entity contains lazy properties > ------------------------------------------------------------------------------- > > Key: NH-2740 > URL: http://216.121.112.228/browse/NH-2740 > Project: NHibernate > Issue Type: Bug > Components: Core, QueryOver > Affects Versions: 3.2.0Beta1 > Reporter: Vitaliy Kryvosheiev > Priority: Major > > QueryOver<> queries do not work for entities with lazy properties if second-level cache is turned on. > Running such query results in Exception > *Entity:* > [Serializable] > public class UserRole > { > public virtual int Id { get; set; } > public virtual string Name { get;set; } > } > *Mapping:* > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="KudaNado.Core.Entities" assembly="KudaNado.Core" > schema="dbo" default-cascade="save-update"> > <class name="UserRole" table="UserRole"> > <cache usage="nonstrict-read-write" region="LongTerm" /> > <id name="Id" column="ID"> > <generator class="native" /> > </id> > <property name="Name" length="50" not-null="true" lazy="true"/> > </class> > </hibernate-mapping> > *Query:* > var roles = session.QueryOver<UserRole>().Take(2).List(); > ADO.NET Provider: MS SQL "))* > .NET Version: 4.0 > 10:07:46,175 [TestRunnerThread] DEBUG [NHibernate.Impl.SessionImpl] - [session-id=3e29ff04-f9e6-4498-b95c-2783ce545b9a] opened session at timestamp: 5350678798987264, for session factory: [/9cd392140f24407d9243cc6bd4c7693b] > 10:07:46,178 [TestRunnerThread] INFO [KudaNado.Integration.Tests.MappingIntegrationTests] - Execute query > 10:07:46,210 [TestRunnerThread] DEBUG [NHibernate.Loader.Criteria.CriteriaQueryTranslator] - put criteria= alias=this0_ > 10:07:46,242 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - Opened new IDbCommand, open IDbCommands: 1 > 10:07:46,242 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - Building an IDbCommand object for the SqlString: SELECT TOP (?) this_.ID as ID12_0_ FROM dbo.UserRole this_ > 10:07:46,245 [TestRunnerThread] INFO [NHibernate.Loader.Loader] - SELECT TOP (@p0) this_.ID as ID12_0_ FROM dbo.UserRole this_ > 10:07:46,249 [TestRunnerThread] DEBUG [NHibernate.SQL] - SELECT TOP (@p0) this_.ID as ID12_0_ FROM dbo.UserRole this_;@p0 = 2 [Type: Int32 (0)] > 10:07:46,251 [TestRunnerThread] DEBUG [NHibernate.Connection.DriverConnectionProvider] - Obtaining IDbConnection from Driver > 10:07:46,252 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - ExecuteReader took 0 ms > 10:07:46,253 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - Opened IDataReader, open IDataReaders: 1 > 10:07:46,254 [TestRunnerThread] DEBUG [NHibernate.Loader.Loader] - processing result set > 10:07:46,254 [TestRunnerThread] DEBUG [NHibernate.Loader.Loader] - result set row: 0 > 10:07:46,256 [TestRunnerThread] DEBUG [NHibernate.Type.Int32Type] - returning '1' as column: ID12_0_ > 10:07:46,259 [TestRunnerThread] DEBUG [NHibernate.Loader.Loader] - result row: EntityKey[KudaNado.Core.Entities.UserRole#1] > 10:07:46,263 [TestRunnerThread] DEBUG [NHibernate.Driver.NHybridDataReader] - running NHybridDataReader.Dispose() > 10:07:46,263 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - Closed IDataReader, open IDataReaders :0 > 10:07:46,263 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - DataReader was closed after 11 ms > 10:07:46,264 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - Closed IDbCommand, open IDbCommands: 0 > 10:07:46,266 [TestRunnerThread] DEBUG [NHibernate.Util.ADOExceptionReporter] - could not execute query > [ SELECT TOP (@p0) this_.ID as ID12_0_ FROM dbo.UserRole this_ ] > System.NotSupportedException: Specified method is not supported. > at NHibernate.Proxy.AbstractProxyFactory.GetFieldInterceptionProxy(Object instanceToWrap) > at NHibernate.Tuple.PocoInstantiator.Instantiate() > at NHibernate.Tuple.PocoInstantiator.Instantiate(Object id) > at NHibernate.Tuple.Entity.AbstractEntityTuplizer.Instantiate(Object id) > at NHibernate.Persister.Entity.AbstractEntityPersister.Instantiate(Object id, EntityMode entityMode) > at NHibernate.Impl.SessionImpl.Instantiate(IEntityPersister persister, Object id) > at NHibernate.Impl.SessionImpl.Instantiate(String clazz, Object id) > at NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) > 10:07:46,268 [TestRunnerThread] WARN [NHibernate.Util.ADOExceptionReporter] - System.NotSupportedException: Specified method is not supported. > at NHibernate.Proxy.AbstractProxyFactory.GetFieldInterceptionProxy(Object instanceToWrap) > at NHibernate.Tuple.PocoInstantiator.Instantiate() > at NHibernate.Tuple.PocoInstantiator.Instantiate(Object id) > at NHibernate.Tuple.Entity.AbstractEntityTuplizer.Instantiate(Object id) > at NHibernate.Persister.Entity.AbstractEntityPersister.Instantiate(Object id, EntityMode entityMode) > at NHibernate.Impl.SessionImpl.Instantiate(IEntityPersister persister, Object id) > at NHibernate.Impl.SessionImpl.Instantiate(String clazz, Object id) > at NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) > 10:07:46,268 [TestRunnerThread] ERROR [NHibernate.Util.ADOExceptionReporter] - Specified method is not supported. > 10:07:46,269 [TestRunnerThread] DEBUG [NHibernate.Util.ADOExceptionReporter] - could not execute query > [ SELECT TOP (@p0) this_.ID as ID12_0_ FROM dbo.UserRole this_ ] > [ SELECT TOP (@p0) this_.ID as ID12_0_ FROM dbo.UserRole this_ ] > System.NotSupportedException: Specified method is not supported. > at NHibernate.Proxy.AbstractProxyFactory.GetFieldInterceptionProxy(Object instanceToWrap) > at NHibernate.Tuple.PocoInstantiator.Instantiate() > at NHibernate.Tuple.PocoInstantiator.Instantiate(Object id) > at NHibernate.Tuple.Entity.AbstractEntityTuplizer.Instantiate(Object id) > at NHibernate.Persister.Entity.AbstractEntityPersister.Instantiate(Object id, EntityMode entityMode) > at NHibernate.Impl.SessionImpl.Instantiate(IEntityPersister persister, Object id) > at NHibernate.Impl.SessionImpl.Instantiate(String clazz, Object id) > at NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) > 10:07:46,269 [TestRunnerThread] WARN [NHibernate.Util.ADOExceptionReporter] - System.NotSupportedException: Specified method is not supported. > at NHibernate.Proxy.AbstractProxyFactory.GetFieldInterceptionProxy(Object instanceToWrap) > at NHibernate.Tuple.PocoInstantiator.Instantiate() > at NHibernate.Tuple.PocoInstantiator.Instantiate(Object id) > at NHibernate.Tuple.Entity.AbstractEntityTuplizer.Instantiate(Object id) > at NHibernate.Persister.Entity.AbstractEntityPersister.Instantiate(Object id, EntityMode entityMode) > at NHibernate.Impl.SessionImpl.Instantiate(IEntityPersister persister, Object id) > at NHibernate.Impl.SessionImpl.Instantiate(String clazz, Object id) > at NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) > at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) > at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) > 10:07:46,269 [TestRunnerThread] ERROR [NHibernate.Util.ADOExceptionReporter] - Specified method is not supported. > 10:07:46,270 [TestRunnerThread] DEBUG [NHibernate.AdoNet.ConnectionManager] - after autocommit > 10:07:46,271 [TestRunnerThread] DEBUG [NHibernate.Impl.SessionImpl] - transaction completion > 10:07:46,271 [TestRunnerThread] DEBUG [NHibernate.AdoNet.ConnectionManager] - transaction completed on session with on_close connection release mode; be sure to close the session to release ADO.Net resources! > 10:07:46,280 [TestRunnerThread] DEBUG [NHibernate.Impl.SessionImpl] - closing session > 10:07:46,280 [TestRunnerThread] DEBUG [NHibernate.AdoNet.AbstractBatcher] - running BatcherImpl.Dispose(true) > 10:07:46,282 [TestRunnerThread] DEBUG [NHibernate.Connection.ConnectionProvider] - Closing connection > 10:07:46,282 [TestRunnerThread] DEBUG [NHibernate.Impl.SessionImpl] - transaction completion > 10:07:46,282 [TestRunnerThread] DEBUG [NHibernate.AdoNet.ConnectionManager] - transaction completed on session with on_close connection release mode; be sure to close the session to release ADO.Net resources! > 10:07:46,284 [TestRunnerThread] DEBUG [NHibernate.Impl.SessionImpl] - [session-id=3e29ff04-f9e6-4498-b95c-2783ce545b9a] running ISession.Dispose() > 10:07:46,284 [TestRunnerThread] DEBUG [NHibernate.Impl.SessionImpl] - [session-id=3e29ff04-f9e6-4498-b95c-2783ce545b9a] executing real Dispose(True) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |