2017-07-10 4 views
0

は、次のようなマッピングを考えてみましょう正しいです:NHibernateの設定充填ではないが、SQLは

<class name="Articulo" table="Articulos"> 
<id name="Id" column="IdArticulo"/> 
<set name="CodigosProveedor" inverse="true" fetch="select"> 
    <key> 
    <column name="IdArticulo"/> 
    </key> 
    <one-to-many class="ArticuloProveedor"/> 
</set> 
<set name="PuntosPedido" inverse="true" fetch="select"> 
    <key column="IdArticulo" foreign-key="IdArticulo"/> 
    <one-to-many class="PuntoPedido"/> 
</set> 
... 
</class> 

<class name="PuntoPedido" table="PersISAVAL_SPCO_Previsiones_PuntosPedidoMes"> 
<composite-id> 
    <key-many-to-one name="Articulo" column="IdArticulo"/> 
    <key-many-to-one name="Color" column="IdColor"/> 
    <key-many-to-one name="Proveedor" column="IdProveedor"/> 
</composite-id> 
<property name="Valor" column="PuntoPedido"/> 
</class> 

<class name="ArticuloProveedor" table="Prov_Articulos"> 
<composite-id> 
    <key-property name="IdArticulo" column="IdArticulo"/> 
    <key-property name="IdProveedor" column="IdProveedor"/> 
</composite-id> 
<property name="LeadTimeForzado" column="PlazoAprovisionamiento"/> 
<property name="IdEstadoHomologacion" column="Estado_Homologacion"/> 
<many-to-one name="Articulo" column="IdArticulo"/> 
<many-to-one name="Proveedor" column="IdProveedor"/> 
</class> 

そしてコール:

  _session.QueryOver<Articulo>() 
      .Where(e => e.ProveedorPreferencial == p) 
      .Fetch(a => a.CodigosProveedor).Eager 
      .Future(); 
     _session.QueryOver<Articulo>() 
      .Where(a => a.ProveedorPreferencial == p) 
      .Fetch(a => a.PuntosPedido).Eager 
      .Future(); 

返されたSQL文は両方の性質のために正しいと思われるが、しかし、CodigosProveedorが正しく取得PuntosPedidoは空のままです。なぜこうなった?

SQL文、彼らは明らかに同じように見える:私は直接SQLを実行した場合

SELECT this_.IdArticulo       as IdArti1_4_1_, 
    this_.Descrip        as Descri2_4_1_, 
    this_.IdProveedorPreferencial    as IdPro11_4_1_, 
    puntospedi2_.IdArticulo     as IdArt1_53_3_, 
    puntospedi2_.IdColor      as IdCol2_53_3_, 
    puntospedi2_.IdProveedor     as IdPro3_53_3_, 
    puntospedi2_.IdArticulo     as IdArt1_53_0_, 
    puntospedi2_.IdColor      as IdCol2_53_0_, 
    puntospedi2_.IdProveedor     as IdPro3_53_0_, 
    puntospedi2_.PuntoPedido     as Punto4_53_0_ 
    FROM Articulos this_ 
    inner join Conf_Articulos this_1_ 
    on this_.IdArticulo = this_1_.IdArticulo 
    left outer join PersISAVAL_SPCO_Previsiones_PuntosPedidoMes puntospedi2_ 
    on this_.IdArticulo = puntospedi2_.IdArticulo 
    WHERE this_.IdProveedorPreferencial = '01816'; 

SELECT this_.IdArticulo       as IdArti1_4_1_, 
    this_.Descrip        as Descri2_4_1_, 
    this_.IdProveedorPreferencial    as IdPro11_4_1_, 
    codigospro2_.IdArticulo     as IdArt1_51_3_, 
    codigospro2_.IdProveedor     as IdPro2_51_3_, 
    codigospro2_.IdArticulo     as IdArt1_51_0_, 
    codigospro2_.IdProveedor     as IdPro2_51_0_, 
    codigospro2_.PlazoAprovisionamiento  as Plazo3_51_0_, 
    codigospro2_.Estado_Homologacion   as Estad4_51_0_ 
    FROM Articulos this_ 
    inner join Conf_Articulos this_1_ 
    on this_.IdArticulo = this_1_.IdArticulo 
    left outer join Prov_Articulos codigospro2_ 
    on this_.IdArticulo = codigospro2_.IdArticulo 
    WHERE this_.IdProveedorPreferencial = '01816'; 

、それが空ではありません。

+0

あなたが表示する呼び出しは何も呼び出されません。 2つの未来を宣言するだけで、後で実行するためにいくつかの変数に格納することはありません。あなたはその執行をどのように引き起こしますか? –

答えて

0

この問題は、一部のレコードでプライマリキーがnullだった1つのフィールドが原因で発生していました。

NHibernateはこれをサポートしていませんが、少なくとも何が起こっているのかのヒントを与えるべきです。