如何使用同一列休眠设置多个一对多关系

Posted

技术标签:

【中文标题】如何使用同一列休眠设置多个一对多关系【英文标题】:how to set Multiple one to many relation with same column hibernate 【发布时间】:2015-12-22 17:01:00 【问题描述】:

有两个实体。

    Route(Arrival、ArrivalID 和 Departure、DepartureID)作为位置 位置(到达、出发)作为路线

位置与路由表是一对多的关系。

我正在尝试设置。

路由.xml

 <many-to-one name="departure" class="com.nakisa.agency.Location" fetch="select" insert="false" update="false">
        <column name="locationID" not-null="true" />
    </many-to-one>

     <many-to-one name="arrival" class="com.nakisa.agency.Location" fetch="select" insert="false" update="false">
        <column name="locationID" not-null="true" />
    </many-to-one>

位置.xml

<set name="arrivals" table="Routes" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="arrivalID" not-null="true" />
            </key>
            <one-to-many class="com.nakisa.agency.Route" />
        </set>


        <set name="departures" table="Routes" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="departureID" not-null="true" />
            </key>
            <one-to-many class="com.nakisa.agency.Route" />
        </set>

即使我在路线中设置了departmentID,但由于departmentID 为null,我收到错误消息。

如何更正这些映射才能正常工作

【问题讨论】:

【参考方案1】:

我认为您在获取时遇到了问题:

Lazy="true|false" 控制关联是立即加载还是按需加载。 fetch="select|subselect|join|batch" 控制实体或集合在需要加载时如何加载。

使用lazy="true"fetch="select",Hibernate 将延迟加载集合并使用选择加载它。如果你设置lazy="false",同样的选择会被执行,不同的是它会被急切地执行。希望这是有道理的。

尝试设置lazy="false",然后看看你的departureID是不是还是null

【讨论】:

以上是关于如何使用同一列休眠设置多个一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

在一对多映射中使用休眠条件(以行表列作为搜索条件之一的搜索标题表)

休眠一对多映射注释问题

休眠一对多关联删除

CoreData - 如何在一对多关系中添加多个对象

使用注释一对多不添加列(休眠)

需要一些有关如何使用新的一对多关系设置核心数据迁移的信息