尽管HQL NHibernate的生产代理取(Nhibernate producing proxy

2019-06-23 16:03发布

我有以下的HQL语句:

select distinct t from TaskEntity as 
inner join fetch t.Case as c
inner join fetch c.Client as client 
inner join fetch c.Matter as matter

然而,尽管物质具有FETCH反对它,它仍然返回作为代理。

我对这个对象映射低于

References(x => x.Matter).Columns(new[] {"c_client","c_matter" });

我一直在使用JOIN这个试过,但我的问题,我从1至2列去,所以它不会接受的映射。

有什么想法吗?

谢谢,

Answer 1:

请注意,您还必须提供正确的GetHashCode的实现。

你的Equals实现也并不大。

此外,这两种方法应该返回“静态”值。 我还没有看到你的类,但应该是这样的:

public class TaskEntity
{
    public int AccountNumber { get; protected set; }
    public int CaseNumber { get; protected set; }
    public Client Client { get; set; }
    public Matter Matter { get; set; }

    public TaskEntity(int accountNr, caseNr)
    {
        AccountNumber = accountNr;
        CaseNumber = caseNr;
    }

    protected TaskEntity() {} // Needed for NHibernate proxies
}

我真的建议你把你的组件ID在单独的类可能的情况下。

此外,阅读覆盖平等下面的文章作为当前的实现可能是有缺陷的: http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx特别了解关于继承和基本类型的部分。



Answer 2:

我计算出这是造成这个问题的问题。

它还决心要复合的ID!

在项目NHibernate的被警告,我没有忽略equals和GetHashCode此前,规避大量的代码修改,并促进代码重用我做了一个CompositeBaseEntity类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Case.Infrastructure
{
    public class BaseCompositeEntity : BaseEntity
    {
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
    }
}

这个类,使放回原处什么NHibernate的告诉我不要! 由于有两个按键比较平等的,都必须重写Equals和GetHashCode的()方法成为类似:

public override bool Equals(object obj)
        {
            if (obj == null)
                return false;
            var t = obj as ClientMatterEntity;
            if (t == null)
                return false;
            if (AccountNumber== t.ClientAcconuntNumber && CaseNumber == t.CaseNumber)
                return true;
            return false;
        }

这样,NHibernate的知道应该比较究竟如何做,然后知道它是否有在第一级高速缓存对象(它会如我们指定提取)。

更多信息可以在这里找到: http://nhforge.org/blogs/nhibernate/archive/2010/07/01/nhibernate-and-composite-keys.aspx



文章来源: Nhibernate producing proxy despite HQL fetch