Hibernate忽略类&映射
本文关键字:映射 Hibernate | 更新日期: 2023-09-27 18:17:05
我似乎经常遇到这个问题。
我设置了一个新类。我设置了一个新的hmm .xml映射,并使其成为嵌入式资源。我将运行我的应用程序,它将告诉我属性名称不匹配~最常见的是类和映射之间的属性名称的大小写问题。指定的错误"no getter/setter",如映射中所示。
但这不是这个问题的重点,我修正了它。
现在所有的错字都被修复了,但是hibernate不做任何事情。它完全忽略了积分。我知道它没有调用SQL server,因为我在SQL server端跟踪了它。我甚至可以更改映射所指向的视图的名称,就好像我甚至不需要映射一样~因为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
这是我的应用程序(方法在a从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日志文件中记录有关node/vNodes的信息~甚至在DEBUG级别也不记录。同一DAO中的其他方法和类将被记录日志。
我宁愿有一些错误在某些地方帮助我理解我需要修复的。
我经常使用这个模式/架构,它工作得非常好。但在很多情况下,当我开始一个新的类/实体/集成,并首先得到鸭子在一排。
尊重,欣赏
正好今天的问题是映射的文件名是"Nodes.hdm..xml"。不知道这两个点是怎么变成文件扩展名的
我忘记了hibernate是如何在可执行文件中嵌入资源的资源列表中使用文件名的。文件名中的任何小错误和hibernate都不会知道它有需要使用的资源。