2016-11-09 163 views
0

我似乎有這個問題很多。休眠忽略類和映射

我設置了一個新類。 我設置了一個新的hbm.xml映射並使其成爲一個嵌入式資源。 我將運行我的應用程序,它會告訴我我的屬性名稱不匹配 - 通常是類和映射之間屬性名稱中的一個案例問題。特定錯誤「no getter/setter」作爲映射中顯示的名稱。

但這不是這個問題的關鍵,我解決了這個問題。

現在所有的拼寫錯誤都是固定的,但現在hibernate並沒有做任何事情。它完全忽視了整合。它不會調用SQL服務器,我知道是因爲我在SQL服務器端跟蹤了它。我甚至可以更改映射指向的視圖的名稱,就好像我甚至不需要映射〜因爲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日誌記錄文件中記錄了有關Nodes/vNodes的記錄〜即使在DEBUG級別也是如此。記錄相同DAO中的其他方法和類。但沒有關於這個。

我寧願有一些錯誤在哪裏幫助我瞭解我需要解決的問題。

我使用這種模式/架構很多,它非常有效。但是,當我開始一個新的班級/實體/整合並且首先讓鴨子連續獲得時,我會多次嘗試。

尊重&升值

回答

0

恰好今天的問題是映射文件的文件名是「Nodes.hdm..xml」。 不知道這兩個點如何得到文件擴展名int。

我忘了的東西是hibernate如何在可執行文件的資源列表中使用文件名。在文件名和hibernate中任何錯誤的東西都不會知道它有一個它需要使用的資源。