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 |