- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑 - 在 hibernate jira 发现完全相同的问题这说解决了。这仍然是 NHibernate 的问题吗
. Category 与 Department 是多对一的关系。 DepartmentDescription 表以多种语言保存部门的描述。
这些是 C# 中的实体及其 Nhibernate 映射。我已将 DepartmentDescriptions 建模为 Department 上的 IDictionary
public class Category
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Department Department { get; set; }
}
public class Department
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IDictionary<string, string> Description { get; set; }
}
类别映射
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NH.Domain" namespace="NH.Domain">
<class name="Category" table="Category">
<id name="Id" column="Id">
<generator class="identity"></generator>
</id>
<property name="Name" column="Name"></property>
<many-to-one name="Department" column="DepartmentId" class="Department"></many-to-one>
</class>
</hibernate-mapping>
部门映射
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NH.Domain" namespace="NH.Domain">
<class name="Department" table="Department">
<id name="Id" column="Id">
<generator class="identity"></generator>
</id>
<property name="Name" column="Name"></property>
<map name="Description" table="DepartmentDescription">
<key column="DepartmentId"></key>
<index column="LanguageCode" type="string"></index>
<element column="Description" type="string"></element>
</map>
</class>
</hibernate-mapping>
这是我用来获取类别并急切加载其部门的 HQL
select c from Category as c
join fetch c.Department as dept
join fetch dept.Description as desc
where c.Id=1
在执行此 HQL 时,我得到一个 system.nullreferenceexception - 表示对象未设置为对象的引用。这是堆栈跟踪
at NHibernate.Loader.BasicLoader.IsBag(ICollectionPersister collectionPersister)
at NHibernate.Loader.BasicLoader.PostInstantiate()
at NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader..ctor(QueryTranslatorImpl queryTranslator, ISessionFactoryImplementor factory, SelectClause selectClause)
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 replacements, Boolean shallow, String collectionRole)
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary`2 replacements, Boolean shallow)
at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryString, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
at NHibernate.Engine.Query.HQLStringQueryPlan.CreateTranslators(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(String queryString, Boolean shallow, IDictionary`2 enabledFilters)
at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(String query, Boolean shallow)
at NHibernate.Impl.AbstractSessionImpl.CreateQuery(String queryString)
at NH.Program.Main(String[] args) in Program.cs:line 32
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
感谢任何帮助。
最佳答案
在这种情况下,我会说,你做的是正确的,但解析器没有正确读取它。无论如何,这是可行的:
select c from Category as c
join fetch c.Department as dept
// join fetch dept.Description as desc
join fetch c.Department.Description as desc // alias not used
where c.Id=1
这样的查询最后会加入 Department
两次...,但结果如您所愿。
为什么这个错误仍然存在于 HQL 解析器中(在像 NHibernate 这样的成熟产品中)的原因可能有一个:您正在一些非常具体、罕见的场景中使用。这不是 NHiberante 的借口。但可能/应该是一个标志...
我会建议,而不是使用 IDictinary<ValueType, ValueType>
, 给它更多编码 (negative) 并创建包装对象并将其映射为 ILit<MyWrapperObject>
.您将获得更多标准行为和更好的查询选项。请查看Nhibernate query for items that have a Dictionary Property containing value
关于nhibernate - System.NullReferenceException 尝试预先加载根实体上关联的 IDICTIONARY。你看到这个 HQL 有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21243592/
当我单步执行以下代码时,第二行的 report 为空。但是,第三行生成 NullReferenceException。 member this.setTaggedResearchReportList
我正在尝试按照建议从 URL 获取查询字符串 here ,但我收到 NullReferenceException。我的代码与链接帖子中的代码之间的唯一区别是我的代码是静态的,我看不出这会如何导致错误。
我有以下程序,这是一段示例代码,展示了 C# 反射如何对类进行操作。一切正常,完全没有问题。 public class Program { public static void Main() {
我在以下代码中使用 F# 类型和数据结构(我在 Mac 上使用 Monodevelop,这仅发生在 Interactive 中): type UnbalancedSet = | E |
我有一个 asp.net/C# 类可以调整图像的大小以作为文件缓存在服务器上,但是确定使用哪个编码器的代码部分似乎偶尔会抛出 NullReferenceException。 下面是初始化和传回编码器的
我已经向几位同事展示了这一点,但没有人给出解释。我纯粹偶然遇到了这个问题,因为我以为我在代码中发现了一个错误,但惊讶地发现代码实际上运行了。这是一个简化版本。这已通过 XE-2 完成。 到目前为止,与
这把我难住了。我试图优化 Noda Time 的一些测试,其中我们进行了一些类型初始值设定项检查。我想在将所有内容加载到新的 AppDomain 之前,我想找出类型是否有类型初始值设定项(静态构造函数
当我的页面加载时,我从 SQLite 数据库加载一个列表,有时在加载时我会得到 NullReferenceException ,并显示错误:对象引用未设置为对象的实例。 它在 SQLite 类文件中破
这个问题已经有答案了: What is a NullReferenceException, and how do I fix it? (26 个回答) 已关闭 4 年前。 我收到以下异常: Unhan
当我的页面加载时,我从 SQLite 数据库加载一个列表,有时当它加载时我得到 NullReferenceException 错误说 Object reference not set to an对象的
我有以下代码: try { using (var stream = new MemoryStream()) { var ms = stream; if (con
这个问题已经有答案了: What is a NullReferenceException, and how do I fix it? (26 个回答) 已关闭 4 年前。 我收到以下异常: Unhan
我有以下代码。 XElement opCoOptOff = doc.Descendants(ns + "OpCoOptOff").FirstOrDefault(); String opCo = o
这个问题在这里已经有了答案: What is a NullReferenceException, and how do I fix it? (27 个答案) 关闭 4 年前。 我有队列代码但抛出 N
所以我正在制作一个应用程序,一切都运行良好,直到发生以下情况: 我已经通过调试器进行了检查,但无法找到导致此异常的确切原因。我感觉根本原因在 SQL 方面,因为这是我最近更改的唯一部分,但我需要确切地
class Puzzle { private int PUZZLESIZE = 3; private int col, row; priva
我有一项学校作业,我快完成了,只剩下一件事了。每次启动程序时,我都会收到 NullReferenceException。除了抛出异常的 ListView 外,一切都按预期工作。 这是来自主窗体: pr
我向 Form1 组件添加了一个面板。该面板名为 panel1。 浏览通用列表时,我想动态添加标签。看看我的小代码: if (list.Count > 0) { foreach (TLClas
这是我的场景:我有一个控制台应用程序,我正在尝试使用以下代码处理控制台的“关闭事件”: static void Main(string[] args) { SetConsoleCtrlHand
这可能已经有人问过了。我搜索了 SO 并发现了一些关于 Null VS String.Empty 的问题,但我很好奇为什么以下语句不会抛出 NullReferenceException: String
我是一名优秀的程序员,十分优秀!