我已经阅读了一些关于 fetch=join 的帖子 - http://nhforge.org/blogs/nhibernate/archive/2009/04/09/nhibernate-mapping-lt-many-to-one-gt.aspx (ser4ik.livejournal.aspx) com/2505.html) 所以我有一些问题,例如我有课
<class name="AttributesInf" table="attr_inf">
<id name="Id">
<generator class="identity"/>
</id>
<property name="Name" />
<property name="Desc"/>
</class>
和
<class name="AttributeValue" table="attr_val">
<id name="Id">
<generator class="identity"/>
</id>
<property name="Value" />
<many-to-one name="AttrName" column="attrId"/>
</class>
如果我在没有 set fetch="join" 的情况下使用这个映射,我会得到 sql:
Select av.Id, av.Value, av.attrId From attr_val av where av.Id=...()
然后单独的sql查询,如:
Select * From attr_inf where Id = av.attrId
所以我的结果是:
class AttrinuteInf
{
int Id;
string Name;
string Desc;
}
class AttributeValue
{
int Id;
string Value;
AttributeInf AttrName;
}
如果我设置 fetch="join" 然后我得到一个查询:
Select u.Id, u.UserName, u.BlogId, b.Id, b.BlogName, b.BlogAuthor, b.BlogMsg
from Users u
Left outer join Blogs b
On u.BlogId=b.Id
Where u.Id = ...
所以我希望得到一堂课:
class AttributeValue
{
int Id;
string Value;
string Name;
string Desc;
}
但是我的结果与我没有将 fetch 设置为“join”一样。
这可以吗?有没有办法<many-to-one>
直接从类映射中获取属性?(不是 AttrName.Name,而只是 Name )
解释:
上面设置的部分映射没有显示我真正的问题。我想将一些实体映射为IDictionary<string,AttributeValue>
. 我将其映射为
<map name="Attributes" table="attr_val" lazy="true" cascade="all-delete-orphan" inverse="true">
<key column="item_id"></key>
<index column="name"></index> //I don't have that item in class AttributeValue, that is why I try to get it from other table
<one-to-many class="AttributeValue"/>
</map>