繁体   English   中英

是否可以通过Composite-ID的“多对一”键进行导航?

[英]Is navigation through composite-id's key-many-to-one possible?

是否可以在Nhibernate中浏览复合ID的键多对一关联?

我有一些(旧)表,它们使用以下设置进行映射:

<class name="StructureUser">
    <composite-id>
        <key-many-to-one name="Structure" class="Structure" column="STRUKTUR_ID" />
        <key-many-to-one name="User" class="User" column="USERID" />
    </composite-id>
    ...
</class>

<class name="Structure">
    <id name="Id" column="id" type="Int32" >
        <generator class="native"/>
    </id>
    <property name="Low" column="low" type="Int32" />
    ...
</class>

我想通过查询中的StructureUser类访问Structure的“低”属性。 我尝试了可能想到的Criteria API的所有用法,但始终会出错。 这是我尝试过的两个查询:

ICriteria crit1 = Session.CreateCriteria(typeof(StructureUser))
    .CreateAlias("Structure", "struc")
    .Add(Restrictions.Le("struc.Low", 123));

ICriteria crit2 = Session.CreateCriteria(typeof(StructureUser))
    .Add(Restrictions.Le("Structure.Low", 123));

crit1中的错误来自数据库,并指出“ struc_1.Low在此上下文中无效”,因为NHibernate不会在sql命令中生成限制所需的联接。 crit2中的错误来自NHibernate,告诉我它无法访问StructureUser上的“ Structure.Low”属性。

我通过声明带有键属性元素的Composite-id并声明了与普通多对一元素的关系来解决这个问题。

这个问题还有其他解决方案吗?

你有没有尝试过

ICriteria crit1 = Session.CreateCriteria(typeof(StructureUser))
    .CreateCriteria("Structure", "struc")
    .Add(Restrictions.Le("struc.Low", 123));

我有一个类似的问题。

就像原始海报所说的那样,您需要在要别名的组合键上的元素上添加多对一关系, 并且需要将属性“ insert”和“ update”设置为“ false”

然后,您可以将其保留在Composite-id中,而无需将其更改为键属性元素。

<class name="StructureUser">
<composite-id>
    <key-many-to-one name="Structure" class="Structure" column="STRUKTUR_ID" />
    <key-many-to-one name="User" class="User" column="USERID" />
</composite-id>

<many-to-one name="Structure" class="Structure" column="STRUKTUR_ID" insert="false" update="false" />

...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM