|
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
|