我似乎经常遇到这个问题。
我设置了一个新课程。 我设置了一个新的hbm.xml映射并使其成为嵌入式资源。 我将运行我的应用程序,它会告诉我属性名称不匹配〜最常见的是类和映射之间属性名称的案例问题。特定错误" no getter / setter"对于映射中显示的名称。
但这不是问题的关键,我解决了这个问题。
现在所有拼写错误都已修复,但现在休眠并没有做任何事情。它完全忽略了整合。它不会调用SQL服务器,我知道因为我在SQL服务器端跟踪它。我甚至可以更改映射所指向的视图的名称,就好像我甚至不需要映射〜因为hibernate只是忽略它以及与此类有关的所有内容。
如果我打开hibernate日志记录(log4net)到DEBUG级别。其他sql实体显示在日志记录中,但不是我的新实体。
你如何解决这个问题?
在过去,我有时会看到映射和SQL实体之间的某些东西并不完美。有时当我连续拿到这两只鸭子时,事情开始起作用。
再次,你如何解决这个问题? nHibernate正在做什么来映射到SQL的映射以及它找到的东西,它不喜欢它只是忽略它。
这是我的班级:
public class Nodes {
public virtual Int64 Id { get; set; }
public virtual Int64 NodeId { get; set; }
public virtual string Node { get; set; }
}
这是我的地图:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" assembly="Prj" namespace="Prj.Nodes.Domain" default-lazy="false">
<class name ="Nodes" table="dbo.vNodes" dynamic-update="false" lazy="false">
<cache usage="read-only"/>
<id name="Id" column="Id" type="Int64">
<generator class="native" />
</id>
<property name="NodeId" />
<property name="Node" />
</class>
</hibernate-mapping>
这是我的SQL:
create table Nodes
(
Id bigint identity(1,1) not null
, NodeId bigint not null
, Node varchar(10) null
)
insert into Nodes (NodeId, Node) values (100, 'Hello')
go
create view vNodes
as
select
Id
, NodeId
, Node
from Nodes with (NoLock)
go
这是我的申请(来自DOA的方法):
using NHibernate;
public List<Nodes> LoadNodes()
{
ICriteria c = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof(Nodes));
List<Nodes> n = c.List<Nodes>().ToList<Nodes>();
return n;
}
在hibernate日志记录文件中记录了关于节点/ vNode的注意事项〜甚至没有在DEBUG级别记录。记录同一DAO中的其他方法和类。但没有关于这个。
我宁愿在帮助我理解需要解决的问题时遇到一些错误。
我经常使用这种模式/架构,它的工作非常出色。但是在很多场合,我开始一个新的类/实体/整合,并且我第一次得到了连续的鸭子。
尊重&amp;升值
答案 0 :(得分:0)
今天恰好发生的问题是映射的文件名是&#34; Nodes.hdm..xml&#34;。 不知道两个点如何在那里获得文件扩展名。
我忘记的是hibernate如何在可执行文件的嵌入资源的资源列表中使用文件的名称。文件名和hibernate中的任何小错误都不知道它有一个需要使用的资源。