Nhibernate SetCacheable引发IndexOutOfBoundsException
我在NHibernate中有以下查询,结果是DTO的列表,而不是实体:Nhibernate SetCacheable引发IndexOutOfBoundsException,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在NHibernate中有以下查询,结果是DTO的列表,而不是实体: var result = query //.SetCacheable(true) .SetResultTransformer(new MyDTOTransformer()) .List<DTO>(); 有谁能帮助我,告诉我如何解决这个问题(或者即使NHibernate支持这个问题) 我目前正在使用NHibernate
var result = query
//.SetCacheable(true)
.SetResultTransformer(new MyDTOTransformer())
.List<DTO>();
有谁能帮助我,告诉我如何解决这个问题(或者即使NHibernate支持这个问题)
我目前正在使用NHibernate版本2.1.0.4000
谢谢,,
Jelle我可能弄错了,但我认为查询缓存依赖于启用的二级缓存。老实说,我想知道如果在二级缓存中没有实体缓存,它是否会那么有用,因为它存储的所有内容都是与给定查询/参数组合相关联的ID列表(您仍然需要转到数据库以实际获取对象,在某些情况下,这可能会导致每个对象一个查询)
是我在nhibernate中看到的关于缓存的一篇更好的帖子,它似乎暗示到最后,您只能在二级缓存中缓存查询。我也有同样的例外,现在已经修复了。昨天,当我通过设置实体的
SetCacheable
使用第二个缓存时,出现了IndexOutOfBoundsException
我在谷歌上搜索,发现一个博客提到这可能是我的客户实体的问题。我尝试了query.setCacheable(true)
,并添加了query.setCacheMode(CacheMode.GET)代码>成功了!尝试一下这个解决方案。我认为您只需要使用AddScalar“声明”从DTO返回的列。如果没有下面的AddScalar行(结果集中的每一列对应一行),则没有第二级缓存代码所需的列定义元数据(因此索引超出边界异常)
只需使用AddScalar列出所有返回的列,我敢打赌它一定能工作
var result = query
//.SetCacheable(true)
.AddScalar("yourfirstcolumn",NHibernateUtil.Int32)
.AddScalar("yoursecondcolumn",NHibernateUtil.String)
.SetResultTransformer(new MyDTOTransformer())
.List<DTO>();
var result=query
//.SetCacheable(真)
.AddScalar(“您的第一列”,NHibernateUtil.Int32)
.AddScalar(“yoursecondcolumn”,NHibernateUtil.String)
.SetResultTransformer(新MyDTOTransformer())
.List();
您是否在配置中启用了查询缓存?我已将“使用查询缓存”设置为true(使用fluent nhibernate)。但我没有指定二级缓存提供程序。我只是想知道我的命名查询的结果是在会话期间缓存的。
var result = query
//.SetCacheable(true)
.AddScalar("yourfirstcolumn",NHibernateUtil.Int32)
.AddScalar("yoursecondcolumn",NHibernateUtil.String)
.SetResultTransformer(new MyDTOTransformer())
.List<DTO>();