2016-11-09 5 views
0

У меня, похоже, этот вопрос много.Hibernate игнорирует класс и картографирование

Я устанавливаю новый класс. Я устанавливаю новое сопоставление hbm.xml и делаю его встроенным ресурсом. Я запустил свое приложение, и он скажет мне, что у меня есть несоответствие имен атрибутов. Обычно чаще всего возникает проблема с именем атрибута между классом и отображением. Конкретная ошибка «нет геттера/сеттера» для имени, как показано в отображении.

Но это не точка этого quesiton, я исправить это.

Теперь все опечатки фиксированы, но теперь спящий режим ничего не делает. Он просто полностью игнорирует интеграцию. Он не вызывает SQL-сервер, я знаю, потому что трачу его на стороне SQL-сервера. Я даже могу изменить имя представления, на которое указывает отображение, и это так, как будто мне даже не нужно сопоставление ~, потому что спящий режим просто игнорирует его и все, что касается этого класса.

Если я включил ведение журнала спящего режима (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; 
} 

Отмечается о Nodes/vNodes в файле регистрации hibernate ~ даже на уровне DEBUG. Записываются другие методы и классы в одном и том же DAO. Но ничего об этом.

Я бы предпочел, чтобы некоторые ошибки помогли мне понять, что мне нужно исправить.

Я использую этот шаблон/архитектуру много, и он работает фантастически. Но во многих случаях, когда я начинаю новый класс/сущность/интеграцию, я сначала получаю уток подряд.

Уважение & оценка

ответ

0

Просто так происходит сегодня проблема это имя файла отображение было «Nodes.hdm..xml». не знаю, как две точки получили int для расширения файла.

Что-то я забыл, так как спящий режим использует имя файла в списке ресурсов встроенных ресурсов в исполняемом файле. Любая незначительная ошибка в именах файлов и hibernate не будет знать, что у него есть ресурс, который ему нужно использовать.

Смежные вопросы