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