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中的其他方法和类将被记录日志。

我宁愿有一些错误在某些地方帮助我理解我需要修复的。

我经常使用这个模式/架构,它工作得非常好。但在很多情况下,当我开始一个新的类/实体/集成,并首先得到鸭子在一排。

尊重,欣赏

Hibernate忽略类&映射

正好今天的问题是映射的文件名是"Nodes.hdm..xml"。不知道这两个点是怎么变成文件扩展名的

我忘记了hibernate是如何在可执行文件中嵌入资源的资源列表中使用文件名的。文件名中的任何小错误和hibernate都不会知道它有需要使用的资源。