From: Josef H. (JIRA) <nh...@gm...> - 2011-04-25 18:05:53
|
Nhibernate 2nd level cache and Result transformer ------------------------------------------------- Key: NH-2673 URL: http://216.121.112.228/browse/NH-2673 Project: NHibernate Issue Type: Bug Components: Core Affects Versions: 3.2.0Alpha2 Reporter: Josef Holan Priority: Blocker Attachments: Caching.zip I have a big problem with 2nd level cache in NHibernate. Everything is working fine(Cache is running well) until I use .SetResultTransformer(new DistinctRootEntityResultTransformer()) Example code: using (var session = SessionFactory.OpenSession()) { Console.WriteLine("---> using query first time"); var query = session .CreateQuery("from Blog b where b.Author = :author") .SetString("author", "Gabriel") .SetCacheable(true) .SetResultTransformer(new DistinctRootEntityResultTransformer()) ; var list = query.List<Blog>(); } Exception: NHibernate.PropertyAccessException: Exception occurred getter of Caching.Blog.Id v NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Properties\BasicPropertyAccessor.cs: line 211 v NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object entity) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs: line 139 v NHibernate.Persister.Entity.AbstractEntityPersister.GetIdentifier(Object obj, EntityMode entityMode) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3883 v NHibernate.Persister.Entity.AbstractEntityPersister.IsTransient(Object entity, ISessionImplementor session) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3669 v NHibernate.Engine.ForeignKeys.IsTransient(String entityName, Object entity, Nullable`1 assumed, ISessionImplementor session) v ForeignKeys.cs: line 194 v NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName, Object entity, ISessionImplementor session) v ForeignKeys.cs: line 250 v NHibernate.Type.ManyToOneType.Disassemble(Object value, ISessionImplementor session, Object owner) v ManyToOneType.cs: line 137 v NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session) v StandardQueryCache.cs: line 82 v NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result) v Loader.cs: line 1668 v NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1617 v NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1591 v NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) v QueryLoader.cs: line 300 v NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) v QueryTranslatorImpl.cs: line 111 v NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) v HQLQueryPlan.cs: line 105 v NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) v SessionImpl.cs: line 616 v NHibernate.Impl.SessionImpl.List<T>(String query, QueryParameters parameters) v SessionImpl.cs: line 592 v NHibernate.Impl.QueryImpl.List<T>() v QueryImpl.cs: line 94 v UnitTests.when_having_blog_with_posts.trying_to_cache_a_complex_query() v Blog_Spec.cs: line 110 Mapping: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Caching" assembly="Caching"> <class name="Blog"> <cache usage="read-write"/> <id name="Id"> <generator class="hilo"/> </id> <property name="Author"/> <property name="Name"/> <set name="Posts" cascade="all" lazy="true"> <cache usage="read-write"/> <key column="BlogId"/> <one-to-many class="Post"/> </set> </class> <class name="Post"> <cache usage="read-write"/> <id name="Id"> <generator class="hilo"/> </id> <property name="Title"/> <property name="Body"/> </class> </hibernate-mapping> Classes: public class Blog { public virtual int Id { get; set; } public virtual string Author { get; set; } public virtual string Name { get; set; } public virtual ISet<Post> Posts { get; set; } public Blog() { Posts = new HashedSet<Post>(); } } public class Post { public virtual int Id { get; private set; } public virtual string Title { get; set; } public virtual string Body { get; set; } } nhibernate.config: <property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider</property> <property name="cache.use_second_level_cache">true</property> <property name="cache.use_query_cache" >true</property> In summary: Cache and nhibernate running well until i use result transformer. To work i must disable transformer or 2nd level cache. It is not working together This is only example, i know that distinct in this situation is stupid. -- 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 |
From: Fabio M. (JIRA) <nh...@gm...> - 2011-04-25 20:16:48
|
[ http://216.121.112.228/browse/NH-2673?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Fabio Maulo updated NH-2673: ---------------------------- Priority: Minor (was: Blocker) > Nhibernate 2nd level cache and Result transformer > ------------------------------------------------- > > Key: NH-2673 > URL: http://216.121.112.228/browse/NH-2673 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.2.0Alpha2 > Reporter: Josef Holan > Priority: Minor > Attachments: Caching.zip > > > I have a big problem with 2nd level cache in NHibernate. Everything is working fine(Cache is running well) until I use > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > Example code: > using (var session = SessionFactory.OpenSession()) > { > Console.WriteLine("---> using query first time"); > var query = session > .CreateQuery("from Blog b where b.Author = :author") > .SetString("author", "Gabriel") > .SetCacheable(true) > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > ; > var list = query.List<Blog>(); > } > Exception: > NHibernate.PropertyAccessException: Exception occurred getter of Caching.Blog.Id > v NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Properties\BasicPropertyAccessor.cs: line 211 > v NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object entity) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs: line 139 > v NHibernate.Persister.Entity.AbstractEntityPersister.GetIdentifier(Object obj, EntityMode entityMode) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3883 > v NHibernate.Persister.Entity.AbstractEntityPersister.IsTransient(Object entity, ISessionImplementor session) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3669 > v NHibernate.Engine.ForeignKeys.IsTransient(String entityName, Object entity, Nullable`1 assumed, ISessionImplementor session) v ForeignKeys.cs: line 194 > v NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName, Object entity, ISessionImplementor session) v ForeignKeys.cs: line 250 > v NHibernate.Type.ManyToOneType.Disassemble(Object value, ISessionImplementor session, Object owner) v ManyToOneType.cs: line 137 > v NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session) v StandardQueryCache.cs: line 82 > v NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result) v Loader.cs: line 1668 > v NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1617 > v NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1591 > v NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) v QueryLoader.cs: line 300 > v NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) v QueryTranslatorImpl.cs: line 111 > v NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) v HQLQueryPlan.cs: line 105 > v NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) v SessionImpl.cs: line 616 > v NHibernate.Impl.SessionImpl.List<T>(String query, QueryParameters parameters) v SessionImpl.cs: line 592 > v NHibernate.Impl.QueryImpl.List<T>() v QueryImpl.cs: line 94 > v UnitTests.when_having_blog_with_posts.trying_to_cache_a_complex_query() v Blog_Spec.cs: line 110 > Mapping: > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > namespace="Caching" > assembly="Caching"> > <class name="Blog"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Author"/> > <property name="Name"/> > <set name="Posts" cascade="all" lazy="true"> > <cache usage="read-write"/> > <key column="BlogId"/> > <one-to-many class="Post"/> > </set> > </class> > <class name="Post"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Title"/> > <property name="Body"/> > </class> > </hibernate-mapping> > Classes: > public class Blog > { > public virtual int Id { get; set; } > public virtual string Author { get; set; } > public virtual string Name { get; set; } > public virtual ISet<Post> Posts { get; set; } > public Blog() > { > Posts = new HashedSet<Post>(); > } > } > public class Post > { > public virtual int Id { get; private set; } > public virtual string Title { get; set; } > public virtual string Body { get; set; } > } > nhibernate.config: > <property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider</property> > <property name="cache.use_second_level_cache">true</property> > <property name="cache.use_query_cache" >true</property> > In summary: Cache and nhibernate running well until i use result transformer. To work i must disable transformer or 2nd level cache. It is not working together > This is only example, i know that distinct in this situation is stupid. -- 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 |
From: Josef H. (JIRA) <nh...@gm...> - 2011-04-26 18:00:59
|
[ http://216.121.112.228/browse/NH-2673?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20972#action_20972 ] Josef Holan commented on NH-2673: --------------------------------- Hi, this is key function of nhibernate in my application in company. Is there a workaround or possibility to quick repair? I need 2nd level cache and result transformer working together. Thanks. Josef > Nhibernate 2nd level cache and Result transformer > ------------------------------------------------- > > Key: NH-2673 > URL: http://216.121.112.228/browse/NH-2673 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.2.0Alpha2 > Reporter: Josef Holan > Priority: Minor > Attachments: Caching.zip > > > I have a big problem with 2nd level cache in NHibernate. Everything is working fine(Cache is running well) until I use > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > Example code: > using (var session = SessionFactory.OpenSession()) > { > Console.WriteLine("---> using query first time"); > var query = session > .CreateQuery("from Blog b where b.Author = :author") > .SetString("author", "Gabriel") > .SetCacheable(true) > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > ; > var list = query.List<Blog>(); > } > Exception: > NHibernate.PropertyAccessException: Exception occurred getter of Caching.Blog.Id > v NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Properties\BasicPropertyAccessor.cs: line 211 > v NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object entity) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs: line 139 > v NHibernate.Persister.Entity.AbstractEntityPersister.GetIdentifier(Object obj, EntityMode entityMode) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3883 > v NHibernate.Persister.Entity.AbstractEntityPersister.IsTransient(Object entity, ISessionImplementor session) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3669 > v NHibernate.Engine.ForeignKeys.IsTransient(String entityName, Object entity, Nullable`1 assumed, ISessionImplementor session) v ForeignKeys.cs: line 194 > v NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName, Object entity, ISessionImplementor session) v ForeignKeys.cs: line 250 > v NHibernate.Type.ManyToOneType.Disassemble(Object value, ISessionImplementor session, Object owner) v ManyToOneType.cs: line 137 > v NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session) v StandardQueryCache.cs: line 82 > v NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result) v Loader.cs: line 1668 > v NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1617 > v NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1591 > v NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) v QueryLoader.cs: line 300 > v NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) v QueryTranslatorImpl.cs: line 111 > v NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) v HQLQueryPlan.cs: line 105 > v NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) v SessionImpl.cs: line 616 > v NHibernate.Impl.SessionImpl.List<T>(String query, QueryParameters parameters) v SessionImpl.cs: line 592 > v NHibernate.Impl.QueryImpl.List<T>() v QueryImpl.cs: line 94 > v UnitTests.when_having_blog_with_posts.trying_to_cache_a_complex_query() v Blog_Spec.cs: line 110 > Mapping: > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > namespace="Caching" > assembly="Caching"> > <class name="Blog"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Author"/> > <property name="Name"/> > <set name="Posts" cascade="all" lazy="true"> > <cache usage="read-write"/> > <key column="BlogId"/> > <one-to-many class="Post"/> > </set> > </class> > <class name="Post"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Title"/> > <property name="Body"/> > </class> > </hibernate-mapping> > Classes: > public class Blog > { > public virtual int Id { get; set; } > public virtual string Author { get; set; } > public virtual string Name { get; set; } > public virtual ISet<Post> Posts { get; set; } > public Blog() > { > Posts = new HashedSet<Post>(); > } > } > public class Post > { > public virtual int Id { get; private set; } > public virtual string Title { get; set; } > public virtual string Body { get; set; } > } > nhibernate.config: > <property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider</property> > <property name="cache.use_second_level_cache">true</property> > <property name="cache.use_query_cache" >true</property> > In summary: Cache and nhibernate running well until i use result transformer. To work i must disable transformer or 2nd level cache. It is not working together > This is only example, i know that distinct in this situation is stupid. -- 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 |
From: Fabio M. (JIRA) <nh...@gm...> - 2011-04-30 14:21:48
|
[ http://216.121.112.228/browse/NH-2673?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20983#action_20983 ] Fabio Maulo commented on NH-2673: --------------------------------- Can you create a test ? Something smaller than 7.8MB following this link http://nhforge.org/blogs/nhibernate/archive/2008/10/04/the-best-way-to-solve-nhibernate-bugs-submit-good-unit-test.aspx Thanks > Nhibernate 2nd level cache and Result transformer > ------------------------------------------------- > > Key: NH-2673 > URL: http://216.121.112.228/browse/NH-2673 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.2.0Alpha2 > Reporter: Josef Holan > Priority: Minor > Attachments: Caching.zip > > > I have a big problem with 2nd level cache in NHibernate. Everything is working fine(Cache is running well) until I use > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > Example code: > using (var session = SessionFactory.OpenSession()) > { > Console.WriteLine("---> using query first time"); > var query = session > .CreateQuery("from Blog b where b.Author = :author") > .SetString("author", "Gabriel") > .SetCacheable(true) > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > ; > var list = query.List<Blog>(); > } > Exception: > NHibernate.PropertyAccessException: Exception occurred getter of Caching.Blog.Id > v NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Properties\BasicPropertyAccessor.cs: line 211 > v NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object entity) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs: line 139 > v NHibernate.Persister.Entity.AbstractEntityPersister.GetIdentifier(Object obj, EntityMode entityMode) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3883 > v NHibernate.Persister.Entity.AbstractEntityPersister.IsTransient(Object entity, ISessionImplementor session) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3669 > v NHibernate.Engine.ForeignKeys.IsTransient(String entityName, Object entity, Nullable`1 assumed, ISessionImplementor session) v ForeignKeys.cs: line 194 > v NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName, Object entity, ISessionImplementor session) v ForeignKeys.cs: line 250 > v NHibernate.Type.ManyToOneType.Disassemble(Object value, ISessionImplementor session, Object owner) v ManyToOneType.cs: line 137 > v NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session) v StandardQueryCache.cs: line 82 > v NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result) v Loader.cs: line 1668 > v NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1617 > v NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1591 > v NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) v QueryLoader.cs: line 300 > v NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) v QueryTranslatorImpl.cs: line 111 > v NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) v HQLQueryPlan.cs: line 105 > v NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) v SessionImpl.cs: line 616 > v NHibernate.Impl.SessionImpl.List<T>(String query, QueryParameters parameters) v SessionImpl.cs: line 592 > v NHibernate.Impl.QueryImpl.List<T>() v QueryImpl.cs: line 94 > v UnitTests.when_having_blog_with_posts.trying_to_cache_a_complex_query() v Blog_Spec.cs: line 110 > Mapping: > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > namespace="Caching" > assembly="Caching"> > <class name="Blog"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Author"/> > <property name="Name"/> > <set name="Posts" cascade="all" lazy="true"> > <cache usage="read-write"/> > <key column="BlogId"/> > <one-to-many class="Post"/> > </set> > </class> > <class name="Post"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Title"/> > <property name="Body"/> > </class> > </hibernate-mapping> > Classes: > public class Blog > { > public virtual int Id { get; set; } > public virtual string Author { get; set; } > public virtual string Name { get; set; } > public virtual ISet<Post> Posts { get; set; } > public Blog() > { > Posts = new HashedSet<Post>(); > } > } > public class Post > { > public virtual int Id { get; private set; } > public virtual string Title { get; set; } > public virtual string Body { get; set; } > } > nhibernate.config: > <property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider</property> > <property name="cache.use_second_level_cache">true</property> > <property name="cache.use_query_cache" >true</property> > In summary: Cache and nhibernate running well until i use result transformer. To work i must disable transformer or 2nd level cache. It is not working together > This is only example, i know that distinct in this situation is stupid. -- 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 |
From: Fabio M. (JIRA) <nh...@gm...> - 2011-05-02 14:10:27
|
[ http://216.121.112.228/browse/NH-2673?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Fabio Maulo resolved NH-2673. ----------------------------- Resolution: Fixed Fix Version/s: 3.2.0Alpha3 > Nhibernate 2nd level cache and Result transformer > ------------------------------------------------- > > Key: NH-2673 > URL: http://216.121.112.228/browse/NH-2673 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.2.0Alpha2 > Reporter: Josef Holan > Priority: Minor > Fix For: 3.2.0Alpha3 > > Attachments: Caching.zip > > > I have a big problem with 2nd level cache in NHibernate. Everything is working fine(Cache is running well) until I use > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > Example code: > using (var session = SessionFactory.OpenSession()) > { > Console.WriteLine("---> using query first time"); > var query = session > .CreateQuery("from Blog b where b.Author = :author") > .SetString("author", "Gabriel") > .SetCacheable(true) > .SetResultTransformer(new DistinctRootEntityResultTransformer()) > ; > var list = query.List<Blog>(); > } > Exception: > NHibernate.PropertyAccessException: Exception occurred getter of Caching.Blog.Id > v NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Properties\BasicPropertyAccessor.cs: line 211 > v NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object entity) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs: line 139 > v NHibernate.Persister.Entity.AbstractEntityPersister.GetIdentifier(Object obj, EntityMode entityMode) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3883 > v NHibernate.Persister.Entity.AbstractEntityPersister.IsTransient(Object entity, ISessionImplementor session) v d:\CSharp\NH\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs: line 3669 > v NHibernate.Engine.ForeignKeys.IsTransient(String entityName, Object entity, Nullable`1 assumed, ISessionImplementor session) v ForeignKeys.cs: line 194 > v NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName, Object entity, ISessionImplementor session) v ForeignKeys.cs: line 250 > v NHibernate.Type.ManyToOneType.Disassemble(Object value, ISessionImplementor session, Object owner) v ManyToOneType.cs: line 137 > v NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session) v StandardQueryCache.cs: line 82 > v NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result) v Loader.cs: line 1668 > v NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1617 > v NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) v Loader.cs: line 1591 > v NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) v QueryLoader.cs: line 300 > v NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) v QueryTranslatorImpl.cs: line 111 > v NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) v HQLQueryPlan.cs: line 105 > v NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results) v SessionImpl.cs: line 616 > v NHibernate.Impl.SessionImpl.List<T>(String query, QueryParameters parameters) v SessionImpl.cs: line 592 > v NHibernate.Impl.QueryImpl.List<T>() v QueryImpl.cs: line 94 > v UnitTests.when_having_blog_with_posts.trying_to_cache_a_complex_query() v Blog_Spec.cs: line 110 > Mapping: > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > namespace="Caching" > assembly="Caching"> > <class name="Blog"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Author"/> > <property name="Name"/> > <set name="Posts" cascade="all" lazy="true"> > <cache usage="read-write"/> > <key column="BlogId"/> > <one-to-many class="Post"/> > </set> > </class> > <class name="Post"> > <cache usage="read-write"/> > <id name="Id"> > <generator class="hilo"/> > </id> > <property name="Title"/> > <property name="Body"/> > </class> > </hibernate-mapping> > Classes: > public class Blog > { > public virtual int Id { get; set; } > public virtual string Author { get; set; } > public virtual string Name { get; set; } > public virtual ISet<Post> Posts { get; set; } > public Blog() > { > Posts = new HashedSet<Post>(); > } > } > public class Post > { > public virtual int Id { get; private set; } > public virtual string Title { get; set; } > public virtual string Body { get; set; } > } > nhibernate.config: > <property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider</property> > <property name="cache.use_second_level_cache">true</property> > <property name="cache.use_query_cache" >true</property> > In summary: Cache and nhibernate running well until i use result transformer. To work i must disable transformer or 2nd level cache. It is not working together > This is only example, i know that distinct in this situation is stupid. -- 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 |